2013-07-31 5 views
6

Я использую Sequelize в node.js, чтобы сохранить время открытия и закрытия. Я также использую format.js для форматирования. Менять FindOrCreate я делаю это:UTC DATE в Sequelize.js

result.open = moment(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss"); 
result.save() 
... 

Это прекрасно работает, и время получает отформатированный формат даты и времени в MySQL. Проблема заключается в том, когда я извлекаю время, когда Seqquelize думает, что это время UTC и преобразует его в EST (мой часовой пояс сервера).

Я бы предпочел, чтобы он заходил в базу данных как UTC и вышел таким же образом. Есть ли что-то, что я делаю неправильно? Почему Sequelize не конвертирует его в UTC на вставке, но предполагает, что выйдет UTC? Кроме того, есть ли способ не пытаться преобразовать его в часовой пояс сервера?

+0

ли вам найти решение? Я испытываю ту же проблему, и я не могу найти на ней какую-либо документацию. –

+0

@JeffRyan Я не знаю, будет ли мой ответ ниже слишком поздно, но я надеюсь, что он исправит вашу проблему, если у вас все еще есть (я НАДЕЮСЬ НЕ!) =) – Abdo

ответ

0

Я столкнулся с той же проблемой, вы используете момент неправильно. Вы должны использовать moment.utc вместо moment.

Посмотрите на документацию момент: http://momentjs.com/docs/#/parsing/utc/

result.open = moment.utc(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss"); 
result.save() 
4

Я знаю, что это довольно поздно, но здесь это для тех, кто борется с этим с Postgres (возможно, это может направить вас в правильном направлении другие двигатели)

Как вы знаете, магазины postgres хранятся в UTC.

Проблема, для меня, оказалась не в Sequelize, а в пакете pg.

Для того, чтобы исправить это, поместите это перед вашей sequelize = new Sequelize() линии

var types = require('pg').types; 
var timestampOID = 1114; 
types.setTypeParser(1114, function(stringValue) { 
    return new Date(Date.parse(stringValue + "0000")); 
}); 

Проблема, как мне кажется, является то, что pg пакет делает new Date(stringValue), который возвращает дату в часовом поясе сервера, который является неправильным (если это не МСВ себя)

для получения дополнительной информации, пожалуйста, обратитесь к этой теме: https://github.com/brianc/node-postgres/issues/429

0

у меня была такая же проблема. Я исправил это так:

config/sequelize.js:

const sequelize = new Sequelize(database, user, password, { 
host, 
dialect: 'mysql', 
port, 
operatorsAliases, 
dialectOptions: { 
    useUTC: true, // -->Add this line. for reading from database 
}, 
timezone: '+02:00', // -->Add this line. for writing to database 
pool: { 
    max: 10, 
    min: 0, 
    idle: 10000, 
}, 
logging: console.log, 
// define: {}, 
}) 

momentJS (UTC):

const ACCEPT_FORMAT = 'YYYY-MM-DD hh:mm:ss' 
const { start_date, end_date } = req.params 
const start = moment.utc(start_date, ACCEPT_FORMAT) 
const end = moment.utc(end_date, ACCEPT_FORMAT) 
console.log(start) 
console.log(end) 

Надеется, что это поможет кому-то .... :)