Я использую 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()
, и это было точно, до даты, минуты, часа и секунды.
Любая помощь по этому вопросу будет принята с благодарностью. Спасибо!
TimeZone
; посмотрите, отправляет ли Node время с указанием временной метки и используете ли вы типыtimestamp
илиtimestamp with time zone
(timestamptz
). Также рассмотрите возможность использованияcurrent_timestamp
в PostgreSQL вместо генерации времени в Node. - person Craig Ringer   schedule 22.11.2013current_timestamp
, все еще та же проблема. Какая это будет настройка TimeZone? В коде создания сервера узла? - person maxluzuriaga   schedule 22.11.2013SHOW TimeZone
(оператор SQL) и см. документацию PostgreSQL по часовому поясу. - person Craig Ringer   schedule 22.11.2013date
вместоtimestamptz
, поэтому Postgres записывала только дату, а не время. - person maxluzuriaga   schedule 22.11.2013