2013-07-31 8 views
6

Używam funkcji Sequelize w pliku node.js, aby zapisać czas otwarcia i zamknięcia. Używam także pliku .j.jak do formatowania. Zmieniania FindOrCreate Robię to:DATA UTC w Sequelize.js

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

to działa prawidłowo, a czas zostanie sformatowany do datetime formacie MySQL. Problem polega na tym, że po pobraniu czasu Seqquelize uważa, że ​​jest to czas UTC i zamienia go na EST (moja strefa czasowa serwera).

Wolałbym, aby przejść do bazy danych jako UTC i wyjść w ten sam sposób. Czy jest coś, co robię źle? Dlaczego Sequelize nie konwertuje go na UTC przy wstawianiu, ale zakłada, że ​​wychodzi UTC? Czy istnieje sposób, aby nie spróbować przekonwertować go na strefę czasową mojego serwera?

+0

Czy ty znaleźć rozwiązanie tego? Mam do czynienia z tym samym problemem i nie mogę znaleźć żadnej dokumentacji na ten temat. –

+0

@JeffRyan Nie wiem, czy moja odpowiedź poniżej jest zbyt późna, ale mam nadzieję, że rozwiąże ona problem, jeśli nadal go masz (NADZIEJA NIESAM!) =) – Abdo

Odpowiedz

0

Zmierzyłem się z tym samym problemem, używasz niewłaściwej chwili. Powinieneś użyć moment.utc zamiast tylko moment.

Spójrz na dokumentacji momencie: http://momentjs.com/docs/#/parsing/utc/

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

Wiem, że to dość późno, ale tutaj to jest dla tych, zmaga się z tym z PostgreSQL (może to może skierować Cię w dobrym kierunku inne silniki)

Jak wiadomo postgres przechowuje daty w UTC.

Kwestia, dla mnie, okazała się nie być związana z sekwencjonowaniem, ale raczej z pakietem pg.

Aby to naprawić, należy umieścić ten przed linią sequelize = new Sequelize()

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

Problem, jak sądzę, jest to, że pakiet pg robi new Date(stringValue), która zwraca datę w strefie czasowej serwera, który jest źle (chyba, że ​​to samo w UTC)

aby uzyskać więcej informacji, proszę odnieść się do tego wątku: https://github.com/brianc/node-postgres/issues/429

0

miałem ten sam problem. Naprawiłem to tak:

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) 

nadzieję, że komuś pomóc .... :)