Sequelize将日期从UTC转换为本地
Posted
技术标签:
【中文标题】Sequelize将日期从UTC转换为本地【英文标题】:Sequelize convert date from UTC to local 【发布时间】:2018-09-14 14:21:42 【问题描述】:我对 sequelize.js 中的查询有疑问。
在数据库中,我使用myDate
字段存储模型,该字段以UTC 格式存储。我还有一个指定时间段的查询:
AND p.myDate BETWEEN :dateStart AND :dateEnd
使用sequelize.query
,我将参数替换为:
dateStart: 2018-09-11T22:00:00.000Z
dateEnd: 2018-09-14T14:15:40.609Z
现在的问题是我看到查询正在执行,但是使用 localTime 值:
AND p.myDate BETWEEN '2018-09-12 00:00:00' AND '2018-09-14 16:15:40'
为什么将其转换为当地时间?我找不到正确的答案。
【问题讨论】:
一种可能的方式(可能不是最好的方式)将您的时间以纪元格式存储在数据库中,每当您需要在应用程序上显示数据时,只需使用 moment.format()。这样比较 where 子句不会产生任何问题。 @getashu1,可能是的,虽然我在 sequelize 库中发现了奇怪的行为,但我想知道它的根本原因。 您是否尝试在方言选项中使用时区选项 根据docs.sequelizejs.com/class/lib/…,如果没有设置则default: '+00:00'
。
【参考方案1】:
您可以像这样在 Sequelize 的配置中指定要读取/写入的时区。
development:
username: 'postgres',
password: 'postgres',
database: 'your_database_name',
host: '127.0.0.1',
port: 5432,
dialect: 'postgres',
dialectOptions:
useUTC: false, // for reading from database
,
timezone: '+05:30', // for writing to database
,
【讨论】:
它没有回答我的问题:为什么将日期转换为当地时间。以上是关于Sequelize将日期从UTC转换为本地的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UTC 日期字符串转换为本地时间 (systemTimeZone)