Момент JS дает неверное время в Nodejs - PullRequest
1 голос
/ 06 марта 2020

Я использую moment.js в Nodejs, чтобы получить текущую дату и время. Часть даты, которую я получаю, верна, но время отключено на 4 часа. Например, время в Мичигане - 13:03, но момент - 18:00.

Я вставляю это время в базу данных, и для получения текущего времени я делаю:

moment()

1 Ответ

2 голосов
/ 06 марта 2020

Проблемы масштабируемости:

Прежде всего, отметим, что вам не следует экономить местное время в своей базе данных. Ваша база данных должна иметь как можно меньшую предвзятость, т.е. не должна быть привязана к местному часовому поясу. Почему? Когда вы масштабируете свое решение и внедряете его в облачную службу, такую ​​как AWS, и вам приходится создавать экземпляры нескольких серверов в нескольких размещенных зонах, которые существуют в разных местах по всему миру, ваша база данных сразу же окажется в очень плохой ситуации, и экономьте время недетерминированно c, что дает вам много будущих ошибок, которые нужно убить.

Решение :

Начните только с , сэкономив UT C время в вашей базе данных : moment.utc() || new Date(). Затем во внешнем интерфейсе (при условии, что он у вас есть) браузер пользователя имеет локализованный часовой пояс, встроенный в его среду выполнения. Поэтому у вас есть несколько вариантов управления потреблением приложением пользователя.

Варианты решения

  1. В вашем коде переднего плана moment().format('hh:mm') будет местным часовым поясом, установленным браузером / телефоном / устройством, независимо от того, что использует данные БД.

  2. Если вы дадите тот же самый go из 1, DB ut c time, moment(<time from db as UTC>).format('hh:mm') вы увидите только отформатированное время UT C.

  3. Теперь, если вы хотите, чтобы время БД (UT C) отображалось как местное время вашему соответствующему пользователю, вы можете сделать moment(val).utcOffset('-0400').format('hh:mm')

Главный вывод: вам нужно удалить временное смещение вашего сервера из решения. В противном случае у вас будут действительно плохие проблемы. И вам необходимо учитывать смещение времени браузера в вашем решении, если время в вашей БД будет использовано приложением, ориентированным на пользователя.

ПРИМЕЧАНИЕ: метод .format() имеет множество конфигураций. Я выбрал hh:mm просто для интуитивного примера. Очевидно, это следует изменить в соответствии с вашими потребностями.

...