Sequelize.js中的UTC日期 [英] UTC DATE in Sequelize.js

查看:212
本文介绍了Sequelize.js中的UTC日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在node.js中使用Sequelize来保存打开和关闭时间.我也正在使用moment.js进行格式化.更改FindOrCreate我正在这样做:

I'm using Sequelize in node.js to save open and close times. I'm also using moment.js to format. Alter a FindOrCreate I'm doing this:

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

这可以正常工作,并且时间被格式化为MySQL的datetime格式.问题是当我检索到Seqquelize认为它是UTC时间并将其转换为EST(我的服务器时区)时.

This works fine and the time gets formatted to MySQL's datetime format. The Problem is when I retrieve the time Seqquelize thinks it's a UTC time and converts it to EST (my server timezone).

我希望它像UTC一样进入数据库并以相同的方式出现.我做错什么了吗?为什么Sequelize在插入时不将其转换为UTC,而是假定它是UTC?另外,有没有办法让它尝试转换为我的服务器时区?

I would prefer it to go into the database as UTC and come out the same way. Is there something I'm doing wrong? Why does Sequelize not convert it to UTC on insert but assumes it's UTC coming out? ALso, is there a way to not have it try to convert to my server timezone?

推荐答案

我遇到了同样的问题. 我已经将其固定为这样:

I had the same problem. i've fixed it like this:

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):

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)

希望它将对某人有所帮助....:)

Hope it will help someone.... :)

这篇关于Sequelize.js中的UTC日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆