Изменение разницы дат в зависимости от часового пояса

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

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

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

Когда я меняю свой часовой пояс на ИСТ

  1. Дата А - мое чикагское время 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")    
  }

почему вы считаете серверное время? Разница во времени будет браться из клиентских браузеров, правильно

Invincible 22.05.2019 12:07

Я хочу, чтобы разница в часах была временем сервера и временем в Чикаго прямо сейчас, независимо от часового пояса или времени браузера.

Thalapathy 22.05.2019 12:12
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
2
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В своем вопросе вы указали два очень разных времени сервера. Они не ссылаются на один и тот же фактический момент времени. В каждом случае 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.)

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

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

Другие вопросы по теме