Qual é a melhor maneira de detectar e armazenar o fuso horário do cliente de um aplicativo web é em?

StackOverflow https://stackoverflow.com/questions/179834

  •  05-07-2019
  •  | 
  •  

Pergunta

Tenho uma aplicação web multi-fuso horário que armazena todos os valores de data e hora em UTC no banco de dados, quando as ações acontecem no servidor, eu posso facilmente converta a hora em UTC.

No entanto, quando um cliente entra em um momento ou intervalo de tempo, o que é a melhor maneira de detectar e armazená-lo?

Atualmente, estou fazendo o seguinte:

  1. Obter o valor de Date.getTimezoneOffset () (javascript)
  2. Depois que o código do lado do servidor através da ICallbackEventHandler na página.
  3. Loja esse valor na sessão
  4. Em qualquer pedido posterior, calcular o valor de data e hora de saída / entrada usando fuso horário do cliente.

Independentemente da execução efectiva, esta parece ser uma solução in-elegante. Alguém tem um método melhor?

Foi útil?

Solução

Eu estava fazendo algo muito semelhante, mas agora eu acho que eu prefiro usar javascript para converter todos os momentos para locais no lado do cliente. O servidor irá dar todos os momentos em UTC na página gerada, eo javascript irá convertê-lo uma vez que a página é carregada.

Isso elimina a confusão sobre o código do lado do servidor, como eu sempre sei qual é a hora (UTC). No lado do cliente eu estou usando jQuery e a função each () para formatar todos os valores de tempo de uma só vez. I escrever cada uma das vezes como um tempo de unix em um campo oculto para fazer este fácil de processo com jQuery.

Os únicos problemas que vejo com este método é que a) eu não tenho uma boa verdadeira data / hora formatação de rotina ainda em javascript, e b) se o usuário tem o javascript desligado, então ele não funciona.

Outras dicas

Você pode usar a propriedade "header" do HttpRequest objeto para consultar o "If-Modified-Since" enviado pelo cliente. Este cabeçalho deve conter uma data em um formato que inclui o fuso horário do cliente, como este:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

a extração substring simples lhe dará o código de fuso horário. No entanto, eu tenho medo nem todos os navegadores são coerentes em enviar esse cabeçalho, então você deve experimentar um pouco sobre isso.

Atenciosamente, Fabrizio

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top