Изменение разницы дат в зависимости от часового пояса - PullRequest
0 голосов
/ 22 мая 2019

У меня есть серверное время даты, которое также является CST и датой, основанной на часовом поясе Чикаго, когда я нахожу разницу между двумя датами, значение отличается для разных часовых поясов.

Я не могу добраться до проблемы.

  1. Дата A - мое чикагское время 2019-05-22T04:02:14-05:00
  2. Дата B - время моего сервера 2019-05-20T01:39:34-04:00
  3. Разница между ними 51, когда мой часовой пояс установлен наEST

Когда я меняю часовой пояс на IST

  1. Дата A - мое чикагское время 2019-05-22T04:03:34-05:00
  2. Дата B -время моего сервера 2019-05-20T01:39:34+05:30
  3. Разница часов между ними 60, когда мой часовой пояс установлен в IST

Почему существует разница в часах, когда даты совпадают в обоихдела?

  getIntervalTime(dateA, dateB): ITimer {
    console.log("Date A is my Chicago time", dateA)
    console.log("Date B is my server time", dateB)
    console.log(moment.utc(dateA).diff(moment.utc(dateB), "hours"));

    intervalHours = moment.utc(dateA).diff(moment.utc(dateB), "hours")    
  }

1 Ответ

2 голосов
/ 22 мая 2019

В вашем вопросе вы указали два совершенно разных времени сервера.Они не ссылаются на один и тот же фактический момент времени.В каждом случае 01:39:34 - это местное время в указанном смещении часового пояса.

2019-05-20T01:39:34-04:00 (EDT) = 2019-05-20T05:39:34Z (UTC) = 2019-05-20T11:09:34+05:30 (IST)
2019-05-20T01:39:34+05:30 (IST) = 2019-04-19T20:09:34Z (UTC) = 2019-04-19T16:09:34-04:00 (EDT)

Как видно из сравнения времени UTC, разница составляет 9,5 часамежду этими двумя временными метками.Это также отражается в разнице между двумя смещениями (5.5 - -4 = 9.5).

Это распространенный источник путаницы, так как часто люди видят + или - подписать как оператор и, таким образом, воспринимать его как инструкцию («О, я вижу плюс или минус, поэтому мне нужно добавить или вычесть это значение, чтобы добраться до местного времени»).Но на самом деле это не оператор, а знак смещения.Положительные значения смещения опережают UTC, а отрицательные значения смещения находятся за UTC.(В качестве альтернативы можно рассматривать положительные смещения как к востоку от GMT, а отрицательные смещения к западу от GMT.)

Другими словами, часть даты и времени ISO 8601 отформатированные временные метки уже преобразованы в предоставленный контекст.

Также обратите внимание, что часовой пояс вашего сервера на самом деле не имеет значения, и не должен.Сейчас это сейчас - часовые пояса не меняют это .Таким образом, в большинстве случаев вы должны просто использовать время UTC.

...