Момент и новая Дата () не отображают местное время - PullRequest
0 голосов
/ 03 июля 2019

Я хочу отобразить локальную дату пользователя, но у меня ничего не работает.Всегда возвращает время UTC.

Я пытался:

  1. Возвращает UTC - здесь также смещение равно нулю.
let visitDate = moment.utc().format();
let offset = moment().utcOffset();
let visitDate1 = moment.utc(visitDate).utcOffset(offset)
Возвращает UTC
let visitDate = new Date()
let visitDate1 = moment(visitDate).local().format('MM-DD-YYYY hh:mm:ss');
Это возвращает UTC
let visitDate = new Date()
let visitDate1 = visitDate.toLocaleDateString()

Я пробовал несколько методов, но это не имеет значения, что я делаю, я всегда получаю время UTC.Если я попытаюсь использовать localhost, он отобразит правильное время, но после размещения страницы отобразит UTC.

Как мне перейти на локальный?

Ответы [ 2 ]

2 голосов
/ 03 июля 2019

moment().local() использует часовой пояс локальной машины, поэтому он работает в localhost

если вы знаете это, я бы указал часовой пояс:

moment.tz("America/Los_Angeles").format()
1 голос
/ 03 июля 2019

Кажется, есть несколько возможных точек отказа. Ниже я перечислю те, о которых думаю, и вы сможете оценить, имеют ли они отношение к вашей настройке.

1) Код, управляющий датой, выполняется на сервере, а не локально Большая часть нашего кода Javascript написана для выполнения в браузере пользователя, так что это предположение по умолчанию. Если в этом случае это предположение неверно и код выполняется на сервере, то «локальный» означает «на сервере». Ваш сервер должен работать с временем UTC, что может дать результаты, которые вы видите.

2) Пользователь запускает браузер с UTC Если браузер, который вы используете для тестирования, будет считать UTC местным временем, он даст результаты, которые вы видите. Поскольку вы, вероятно, используете одну и ту же машину для локального хоста и для тестирования, это маловероятный источник проблемы ... но, тем не менее, стоит отметить.

3) Изменение способа отображения даты не меняет способа хранения даты Многие инструменты, которыми мы располагаем для установки / изменения часового пояса, влияют на отображение даты. Тем не менее, объекты Date в Javascript хранятся с использованием Unix Time (в миллисекундах), то есть UTC. Когда вы создаете объект Date - даже с указанным часовым поясом - закулисное представление все равно будет целым числом (представляющим количество миллисекунд) и основанным на UTC. Если при проверке вы проверяете сохраненное значение, а не отображаемое значение, есть большая вероятность, что вы всегда увидите UTC. Однако , работа, которую вы выполняете с библиотекой момента, должна иметь правильное форматирование даты. Если вы проверяете объект момента, вы должны видеть часовой пояс, который ожидаете увидеть.

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

...