2013-07-31 28 views
6

Tôi đang sử dụng Sequelize trong node.js để lưu thời gian mở và đóng. Tôi cũng đang sử dụng định dạng moment.js. Thay đổi một FindOrCreate Tôi đang làm điều này:UTC DATE trong Sequelize.js

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

Điều này làm việc tốt và thời gian được định dạng thành định dạng ngày giờ của MySQL. Vấn đề là khi tôi lấy lại thời gian, Seqquelize nghĩ đó là thời gian UTC và chuyển đổi nó thành EST (múi giờ máy chủ của tôi).

Tôi muốn nó đi vào cơ sở dữ liệu như UTC và đi theo cùng một cách. Có điều gì tôi đang làm sai? Tại sao Sequelize không chuyển đổi nó sang UTC khi chèn nhưng giả sử UTC của nó sắp ra? Ngoài ra, có cách nào để không có nó cố gắng chuyển đổi sang múi giờ máy chủ của tôi không?

+0

Bạn có tìm một giải pháp cho điều này? Tôi gặp vấn đề tương tự và tôi không thể tìm thấy bất kỳ tài liệu nào về nó. –

+0

@ JeffRyan Tôi không biết câu trả lời của tôi dưới đây có quá muộn hay không nhưng tôi hy vọng nó sẽ khắc phục được sự cố của bạn nếu bạn vẫn gặp sự cố (Tôi KHÔNG PHẢI!) =) – Abdo

Trả lời

0

Tôi gặp phải vấn đề tương tự, bạn đang sử dụng sai thời điểm. Bạn nên sử dụng moment.utc thay vì chỉ moment.

Hãy xem tài liệu thời điểm: http://momentjs.com/docs/#/parsing/utc/

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

Tôi biết điều này là khá muộn nhưng ở đây nó là dành cho những người đang gặp khó khăn với điều này với postgres (có lẽ đây có thể chỉ cho bạn đi đúng hướng cho các công cụ khác)

Như bạn biết bưu cục lưu trữ thời gian biểu trong UTC.

Vấn đề, đối với tôi, hóa ra là không phải trong Phần tiếp theo mà là trong gói pg.

Để sửa chữa nó, nơi này trước khi dòng sequelize = new Sequelize() bạn

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

Vấn đề, tôi nghĩ rằng, đó là gói pg đang làm new Date(stringValue), mà trả về ngày trong múi giờ của máy chủ, đó là sai (trừ khi nó ở utc chính nó)

Mọi chi tiết, vui lòng tham khảo chủ đề này: https://github.com/brianc/node-postgres/issues/429

0

tôi đã cùng một vấn đề. tôi đã cố định nó như thế này:

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) 

Hy vọng nó sẽ giúp một ai đó .... :)