Ответ 1
Вы можете использовать параметр конфигурации TZ
для node.js следующим образом.
Для Баш (и связанных)
export TZ=UTC
Для Powershell
$env:TC = 'UTC'
Тогда для обоих:
nodejs server/index.js
Мое приложение работает на серверах Linux, где время (естественно) установлено на UTC/GMT. Однако приложение разработано на настольных компьютерах Mac, где время обычно устанавливается в локальный часовой пояс.
Я могу изменить каждый new Date()
в моем коде для запуска:
var date = new Date().getTime();
И, таким образом, даты на сервере всегда GMT, но это кажется неэлегантным.
Я понимаю предыдущие версии node, используемые всегда для возврата UTC/GMT. Есть ли способ вернуть это поведение?
Изменить: Удалено добавление смещения временной зоны к getTime() для комментариев - поскольку getTime() уже в UTC.
Вы можете использовать параметр конфигурации TZ
для node.js следующим образом.
Для Баш (и связанных)
export TZ=UTC
Для Powershell
$env:TC = 'UTC'
Тогда для обоих:
nodejs server/index.js
Из документы MDN в Date#getTime
:
Значение, возвращаемое методом getTime, - это количество миллисекунд с 1 января 1970 года 00:00:00 по UTC.
Предполагая, что вы сохраняете даты/время как числа (которые я бы рекомендовал), getTime
уже UTC, всегда.
Предположим, что ваш клиент затем запрашивает дату с сервера. Если сервер предоставляет дату как timestamp
, которая является числом, клиент может выполнить:
new Date(timestamp);
И он будет правильно настроен на локальное время на клиенте.
Конечно, возможно, я не понимаю вашу проблему. Но я просто хочу отметить, что это...
new Date().getTime() + new Date().getTimezoneOffset();
... никогда не должен иметь смысла. Он принимает время, основанное на UTC, и затем компенсирует его дальше, по существу, двойное смещение времени.
moment.js - популярный node и браузерный модуль для работы с датами. Он имеет режим utc, который должен дать вам то, что вам нужно. http://momentjs.com/docs/#/manipulating/utc/