Могу ли я сделать node.js Дата всегда в UTC/GMT?

Мое приложение работает на серверах Linux, где время (естественно) установлено на UTC/GMT. Однако приложение разработано на настольных компьютерах Mac, где время обычно устанавливается в локальный часовой пояс.

Я могу изменить каждый new Date() в моем коде для запуска:

var date = new Date().getTime();

И, таким образом, даты на сервере всегда GMT, но это кажется неэлегантным.

Я понимаю предыдущие версии node, используемые всегда для возврата UTC/GMT. Есть ли способ вернуть это поведение?

Изменить: Удалено добавление смещения временной зоны к getTime() для комментариев - поскольку getTime() уже в UTC.

Ответ 1

Вы можете использовать параметр конфигурации TZ для node.js следующим образом.

Для Баш (и связанных)

export TZ=UTC

Для Powershell

$env:TC = 'UTC'

Тогда для обоих:

nodejs server/index.js

Ответ 2

Из документы MDN в Date#getTime:

Значение, возвращаемое методом getTime, - это количество миллисекунд с 1 января 1970 года 00:00:00 по UTC.

Предполагая, что вы сохраняете даты/время как числа (которые я бы рекомендовал), getTime уже UTC, всегда.

Предположим, что ваш клиент затем запрашивает дату с сервера. Если сервер предоставляет дату как timestamp, которая является числом, клиент может выполнить:

new Date(timestamp);

И он будет правильно настроен на локальное время на клиенте.

Конечно, возможно, я не понимаю вашу проблему. Но я просто хочу отметить, что это...

new Date().getTime() + new Date().getTimezoneOffset();

... никогда не должен иметь смысла. Он принимает время, основанное на UTC, и затем компенсирует его дальше, по существу, двойное смещение времени.

Ответ 3

moment.js - популярный node и браузерный модуль для работы с датами. Он имеет режим utc, который должен дать вам то, что вам нужно. http://momentjs.com/docs/#/manipulating/utc/