Дата Node-postgres не сохраняется точно

Я использую Node.js, Postgres и библиотеку node-postgres. Когда я пытаюсь вставить новую запись с текущей датой с помощью такого кода:

client.query('INSERT INTO ideas(date) VALUES($1)', [new Date()], ...);

И это работает нормально, без ошибок. Однако, когда я запускаю оператор select для базы данных и регистрирую результаты, указанная мне дата выглядит так:

Wed Nov 20 2013 19:00:00 GMT-0500 (EST)

Что хорошо, за исключением того, что когда я вставил запись, это был четверг, 21 ноября. И время было 5:47, а не 7:00, как следует из вывода.

Я запускал код еще несколько раз, и он сохранял одну и ту же неточную дату независимо от времени, даже когда начинался следующий час. Это заставляет меня поверить, что по какой-то причине он хранит только дату, а не час или минуту. Кроме того, тот факт, что дата отличается всего на один день, предполагает, что проблема может быть связана с тем, как node-postgres обрабатывает даты.

Я знаю, что это не проблема с Javascript, вычисляющим текущую дату при передаче ее в запрос, потому что я зарегистрировал new Date(), и это было точно, до даты, минуты, часа и секунды.

Любая помощь по этому вопросу будет принята с благодарностью. Спасибо!


person maxluzuriaga    schedule 21.11.2013    source источник
comment
Проверьте настройку сервера TimeZone; посмотрите, отправляет ли Node время с указанием временной метки и используете ли вы типы timestamp или timestamp with time zone (timestamptz). Также рассмотрите возможность использования current_timestamp в PostgreSQL вместо генерации времени в Node.   -  person Craig Ringer    schedule 22.11.2013
comment
Только что попробовал current_timestamp, все еще та же проблема. Какая это будет настройка TimeZone? В коде создания сервера узла?   -  person maxluzuriaga    schedule 22.11.2013
comment
SHOW TimeZone (оператор SQL) и см. документацию PostgreSQL по часовому поясу.   -  person Craig Ringer    schedule 22.11.2013
comment
Ооо, ты был прав. Я использовал тип date вместо timestamptz, поэтому Postgres записывала только дату, а не время.   -  person maxluzuriaga    schedule 22.11.2013


Ответы (1)


Проблема (спасибо Craig за указание на это) заключалась в том, что я использовал тип date для столбца Postgres, который записывает только даты, а не время. Как только я переключился на тип timestamptz, все заработало отлично!

person maxluzuriaga    schedule 22.11.2013