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 转换为本地时间

将 UTC 日期格式转换为本地 nsdate

在 PHP 中将 UTC 日期转换为本地时间

如何将 UTC 日期字符串转换为本地时间 (systemTimeZone)

python / pytz问题从本地时区转换为UTC然后返回

如何仅使用标准库将 UTC 日期时间转换为本地日期时间?