Objetivo: Encontre o local time
e, em UTC time offset
seguida, construa o URL no seguinte formato.
URL de exemplo: / Actions / Sleep? Duration = 2002-10-10T12: 00: 00−05: 00
O formato é baseado na recomendação W3C: http://www.w3.org/TR/xmlschema11-2/#dateTime
A documentação diz:
Por exemplo, 2002-10-10T12: 00: 00−05: 00 (meio-dia em 10 de outubro de 2002, Central Daylight Savings Time, bem como Eastern Standard Time nos EUA) é igual a 2002-10-10T17: 00: 00Z, cinco horas depois de 2002-10-10T12: 00: 00Z.
Portanto, com base no meu entendimento, preciso encontrar minha hora local por new Date () e usar a função getTimezoneOffset () para calcular a diferença e anexá-la ao final da string.
1. Obtenha a hora local com formato
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
resultado
2013-07-02T09:00:00
2. Obtenha a diferença horária UTC por hora
var offset = local.getTimezoneOffset() / 60;
resultado
7
3. Construir URL (apenas parte do tempo)
var duration = local + "-" + offset + ":00";
resultado:
2013-07-02T09:00:00-7:00
O resultado acima significa que meu horário local é 02/07/2013 e a diferença do UTC é de 7 horas (o UTC está 7 horas à frente do horário local)
Até agora parece funcionar, mas e se getTimezoneOffset () retornar um valor negativo como -120?
Estou me perguntando como o formato deve ser nesse caso, porque não consigo descobrir a partir do documento W3C. Desde já, obrigado.
getTimezoneOffset()
retorna o sinal oposto do formato exigido pela especificação que você referenciou.Este formato também é conhecido como ISO8601 ou, mais precisamente, RFC3339 .
Nesse formato, o UTC é representado por um
Z
enquanto todos os outros formatos são representados por um deslocamento do UTC. O significado é o mesmo do JavaScript, mas a ordem de subtração é invertida, então o resultado carrega o sinal oposto.Além disso, não há método no
Date
objeto nativo chamadoformat
, portanto, sua função no # 1 falhará, a menos que você esteja usando uma biblioteca para fazer isso. Consulte esta documentação .Se você está procurando uma biblioteca que possa trabalhar com esse formato diretamente, recomendo experimentar o moment.js . Na verdade, este é o formato padrão, então você pode simplesmente fazer isso:
Esta é uma solução bem testada para vários navegadores e possui muitos outros recursos úteis.
fonte
Acho que vale a pena considerar que você pode obter as informações solicitadas com apenas uma única chamada de API para a biblioteca padrão ...
Você teria que fazer a troca de texto se quiser adicionar o delimitador 'T', remover o 'GMT-' ou anexar ': 00' ao final.
Mas então você pode facilmente jogar com as outras opções se quiser, por exemplo. use 12h ou omita os segundos etc.
Observe que estou usando a Suécia como local porque é um dos países que usa o formato ISO 8601. Acho que a maioria dos países ISO usa este formato 'GMT-4' para o deslocamento de fuso horário, exceto o Canadá, que usa a abreviatura de fuso horário, por exemplo. "EDT" para horário de verão do leste.
Você pode obter a mesma coisa da função i18n padrão mais recente "Intl.DateTimeFormat ()", mas você deve dizer a ela para incluir a hora através das opções ou ela apenas fornecerá a data.
fonte
Esta é a minha função para o fuso horário do cliente, é leve e simples
fonte
Verifique isto:
fonte
Não é necessário moment.js: aqui está uma resposta completa de ida e volta, de um tipo de entrada "datetime-local" que gera uma string ISOLocal para UTCsegundos no GMT e vice-versa:
fonte
Só os meus dois mandam aqui
Eu estava enfrentando esse problema com os datetimes, então o que fiz foi o seguinte:
Em seguida, salve a data no banco de dados para poder compará-la com alguma consulta.
Para instalar
moment-timezone
fonte
Minha resposta é uma pequena variação para aqueles que querem apenas a data de hoje no fuso horário local no formato AAAA-MM-DD.
Deixe-me ser claro:
Meu objetivo: obter a data de hoje no fuso horário do usuário, mas formatado como ISO8601 (AAAA-MM-DD)
Aqui está o código:
Isso funciona porque a localidade da Suécia usa o formato ISO 8601.
fonte
Aqui estão as funções que usei para esse fim:
fonte
Você pode conseguir isso com alguns métodos de extensão simples. O método de extensão de Data a seguir retorna apenas o componente de fuso horário no formato ISO, então você pode definir outro para a parte de data / hora e combiná-los para uma string de deslocamento de data-hora completa.
Exemplo de uso:
Eu sei que estamos em 2020 e a maioria das pessoas provavelmente está usando Moment.js agora, mas uma solução simples de copiar e colar às vezes ainda é útil.
(A razão pela qual divido os métodos de data / hora e deslocamento é porque estou usando uma biblioteca Datejs antiga que já fornece um
toString
método flexível com especificadores de formato personalizado, mas apenas não inclui o deslocamento de fuso horário. Portanto, adicioneitoISOLocaleString
para qualquer pessoa sem dita biblioteca.)fonte