Desejo que o servidor sempre atenda as datas no UTC no HTML e faça com que o JavaScript no site do cliente o converta no fuso horário local do usuário.
Bônus se eu puder imprimir no formato de data da localidade do usuário.
Desejo que o servidor sempre atenda as datas no UTC no HTML e faça com que o JavaScript no site do cliente o converta no fuso horário local do usuário.
Bônus se eu puder imprimir no formato de data da localidade do usuário.
Parece que a maneira mais infalível de começar com uma data UTC é criar um novo Date
objeto e usar os setUTC…
métodos para configurá-lo para a data / hora desejada.
Em seguida, os vários toLocale…String
métodos fornecerão saída localizada.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
toLocateDateString()
retorna algo parecido com 'Domingo, 12 de janeiro de 2014' ..var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
funções.Para novos projetos, basta usar moment.js
Essa pergunta é bastante antiga, então o moment.js não existia naquele momento, mas para novos projetos, simplifica muito essas tarefas.
É melhor analisar sua string de data do UTC da seguinte maneira (crie uma string compatível com ISO-8601 no servidor para obter resultados consistentes em todos os navegadores):
Agora basta usar
m
em seu aplicativo, moment.js o padrão para o fuso horário local para operações de exibição. Existem várias maneiras de formatar os valores de data e hora ou extrair partes dele.Você pode até formatar um objeto de momento no código do idioma dos usuários assim:
Para transformar um objeto moment.js em um fuso horário diferente (ou seja, nem o local nem o UTC), você precisará da extensão moment.js . Essa página também tem alguns exemplos, é bem simples de usar.
fonte
For old projects, just use jQuery
Você pode usar
new Date().getTimezoneOffset()/60
para o fuso horário. Também existe umtoLocaleString()
método para exibir uma data usando a localidade do usuário.Aqui está a lista completa: Trabalhando com datas
fonte
toLocaleString
?Depois de criar seu objeto de data, eis um trecho da conversão:
A função pega um objeto Date formatado em UTC e uma string de formato.
Você precisará de um
Date.strftime
protótipo.fonte
getTimezoneOffset()/60
pode retornar uma fração (por exemplo, o deslocamento da Índia de +05: 30 retornará 5,5). Os decimais são truncados. Caso contrário, definir as horas atualiza outros valores (defina as horas para 48 e veja o que acontece).No JS, não há maneiras simples e de plataforma cruzada para formatar a hora local da data, além da conversão de cada propriedade, conforme mencionado acima.
Aqui está um hack rápido que eu uso para obter o AAAA-MM-DD local. Observe que isso é um hack, pois a data final não terá mais o fuso horário correto (portanto, você deve ignorar o fuso horário). Se eu precisar de mais alguma coisa, uso moment.js.
O d.getTimezoneOffset () retorna o deslocamento do fuso horário em minutos e o d.getTime () está em ms, portanto x 60.000.
fonte
Aqui está o que eu usei em projetos anteriores:
fonte
getTimezoneOffset()/60
, geralmente retornam um valor decimal. Isso é particularmente verdadeiro para datas anteriores a 1900, onde muitos lugares tinham compensações em minutos e segundos. Além disso, agora são necessárias datas javascript para oferecer suporte a compensações históricas. Por exemplo, em 1890, a compensação em Moscou foi de +2: 30: 17. Consulte Navegadores, fusos horários, Erro do Chrome 67 .O
.getTimezoneOffset()
método relata o deslocamento do fuso horário em minutos, contando "para oeste" a partir do fuso horário GMT / UTC, resultando em um valor de deslocamento negativo para o que normalmente está acostumado. (Por exemplo, o horário de Nova York seria relatado em +240 minutos ou +4 horas)Para obter um deslocamento normal do fuso horário em horas, você precisa usar:
Detalhe importante:
Observe que o horário de verão é fatorado no resultado - portanto, o que esse método fornece é realmente o deslocamento de hora - e não o deslocamento geográfico real do fuso horário .
fonte
Com a data do código PHP eu usei algo como isto ..
Podemos chamar assim
fonte
Eu misturei as respostas até agora e as adicionei, porque tive que ler todas elas e investigar adicionalmente por um tempo para exibir uma sequência de data e hora de db no formato de fuso horário local do usuário.
A string datetime vem de um python / django db no formato: 2016-12-05T15: 12: 24.215Z
A detecção confiável do idioma do navegador em JavaScript parece não funcionar em todos os navegadores (consulte JavaScript para detectar a preferência de idioma do navegador ), por isso recebo o idioma do navegador no servidor.
Python / Django: envie a linguagem do navegador de solicitação como parâmetro de contexto:
HTML: escreva-o em uma entrada oculta:
JavaScript: obtenha o valor da entrada oculta, por exemplo, en-GB, en-US; q = 0,8, en; q = 0,6 / e, em seguida, pegue o primeiro idioma da lista apenas por meio de substituição e expressão regular
JavaScript: converta para data e hora e formate-o:
Consulte: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
O resultado é (o idioma do navegador é pt-br): 05/12/2016, 14:58
fonte
fonte
options
parte para o meu caso)A melhor solução que encontrei é criar [time display = "llll" datetime = "UTC TIME" /] Tags e usar javascript (jquery) para analisar e exibi-lo em relação ao horário do usuário.
http://momentjs.com/ Moment.js
exibirá a hora muito bem.
fonte
Você pode usar o seguinte, que relata o deslocamento do fuso horário do GMT em minutos:
Nota: - esta função retorna um número negativo.
fonte
getTimeZoneOffset () e toLocaleString são bons para o trabalho básico de datas, mas se você precisar de suporte real ao fuso horário, consulte o TimeZone.js da mde .
Há mais algumas opções discutidas na resposta a esta pergunta
fonte
Para converter data em data local, use o método toLocaleDateString ().
Para converter a hora em hora local, use o método toLocaleTimeString ().
fonte
Não sei como fazer a localidade, mas o javascript é uma tecnologia do lado do cliente.
terá a hora e a data do cliente (conforme relatado pelo navegador e por extensão do computador em que ele está sentado). Deve ser trivial incluir o tempo do servidor na resposta e fazer algumas contas simples para calcular o deslocamento.
fonte