Проблема в том, что дата создается как время UTC, но поскольку DATEONLY
не знает о часовом поясе, он форматирует объект Date «как есть» (по местному времени) в формате YYYY-MM-DD
(используя момент.js - см. здесь в источнике ).
Для DATEONLY
вы можете просто сделать это:
var date = new Date(2000, 9, 31);
Это правильно вставит дату.
Программисты редко говорят это, но на этот раз вы думали слишком много о часовых поясах!
СТАРЫЙ НЕПРАВИЛЬНЫЙ ОТВЕТ
Это зависит от того, как вы проверяетезначение, но javascript и postgresql преобразуют его для отображения в местном часовом поясе.
Sequelize использует тип TIMESTAMP WITH TIMEZONE для поля даты ( source ).
В postgresql документах он говорит:
Для метки времени с часовым поясом внутренне сохраненное значение всегда в UTC (универсальное координированное время, традиционно известное какСреднее время по Гринвичу, GMT).Входное значение с указанным явным часовым поясом преобразуется в UTC с использованием соответствующего смещения для этого часового пояса.Если во входной строке не указан часовой пояс, предполагается, что он находится в часовом поясе, указанном системным параметром часового пояса, и преобразуется в UTC с использованием смещения для часового пояса.
Когда отметка временикогда выводится значение часового пояса, оно всегда преобразуется из UTC в текущий часовой пояс и отображается как местное время в этом поясе.Чтобы увидеть время в другом часовом поясе, измените часовой пояс или используйте конструкцию AT TIME ZONE (см. Раздел 9.9.3).
Если вы выводите значение времени в postgresql, попробуйте преобразовать его вУНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ.Если вы выводите его в javascript, попробуйте date.toUTCString()
.
. Причина, по которой ваши хаки работают, заключается в том, что они на самом деле хранят 2000-11-01 05:00
, но когда вы проверяете значение, оно конвертируется в ваше местное время.зона. * 1 042 *