【问题标题】:Sequelize convert date from UTC to localSequelize将日期从UTC转换为本地
【发布时间】: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'

标签: javascript mysql sql mariadb sequelize.js


【解决方案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
  },

【讨论】:

  • 它没有回答我的问题:为什么将日期转换为当地时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多