2013-07-31 7 views
6

Ich benutze Sequelize in node.js zum Speichern von Öffnen und Schließen Zeiten. Ich verwende auch moment.js zum Formatieren. Ändern Sie eine FindOrCreate ich dies zu tun:UTC DATE in Sequelize.js

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

Dies funktioniert gut und wird die Zeit, um die MySQL-Datetime-Format formatiert. Das Problem ist, wenn ich die Zeit erhalte, Seqquelize denkt, dass es eine UTC-Zeit ist und es in EST (meine Server-Zeitzone) umwandelt.

Ich würde es vorziehen, in die Datenbank als UTC zu gehen und auf die gleiche Weise herauskommen. Gibt es etwas, was ich falsch mache? Warum konvertiert Sequelize beim Einfügen nicht in UTC, sondern geht davon aus, dass es UTC gibt? ALSO, gibt es eine Möglichkeit, es nicht versuchen, in meine Server-Zeitzone zu konvertieren?

+0

Hast du eine Lösung finden? Ich habe das gleiche Problem und kann keine Dokumentation finden. –

+0

@ JeffRyan Ich weiß nicht, ob meine Antwort unten zu spät ist, aber ich hoffe, es behebt Ihr Problem, wenn Sie es immer noch haben (ich hoffe nicht!) =) – Abdo

Antwort

0

Ich konfrontiert das gleiche Problem, Sie verwenden Moment falsch. Sie sollten moment.utc anstatt nur moment verwenden.

einen Blick zur Zeit Dokumentation Nehmen: http://momentjs.com/docs/#/parsing/utc/

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

Ich weiß, das ziemlich spät, aber hier ist es die für mit diesem mit Postgres kämpfen (vielleicht haben Sie in der richtigen Richtung kann dies für Punkt andere Motoren)

Wie Sie wissen, speichert Postgres Datum in UTC.

Das Problem, für mich, entpuppte sich nicht in Sequelize, sondern eher im pg Paket.

Um es zu beheben, legen Sie diese vor Ihrer sequelize = new Sequelize() Linie

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

Das Problem, ich glaube, ist, dass das pg Paket new Date(stringValue) tut, was das Datum in der Zeitzone des Servers zurückgibt, was falsch ist (es sei denn, es in utc selbst ist)

weitere Informationen finden sie in diesem Thread: https://github.com/brianc/node-postgres/issues/429

0

ich hatte das gleiche Problem. ich habe es wie folgt festgelegt:

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) 

Hoffe, dass es jemand helfen .... :)