Javascript 节点续集-插入日期“;原样;不转换为UTC

Javascript 节点续集-插入日期“;原样;不转换为UTC,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我试着运行一个简单的查询,比如 Insert into table (somedate) values ('2018-06-11 23:59:00') 但Sequelize将其作为 Insert into table (somedate) values ('2018-06-12 02:59:00') 有没有一个选项可以将日期设置为“原样”而不进行任何转换或更改?我为您找到了一个简单的解决方案。您必须编辑Sequelize文件,这并不总是一个选项,但它可能会解决您的问题 打开sequelize

我试着运行一个简单的查询,比如

Insert into table (somedate) values ('2018-06-11 23:59:00')
但Sequelize将其作为

Insert into table (somedate) values ('2018-06-12 02:59:00')

有没有一个选项可以将日期设置为“原样”而不进行任何转换或更改?

我为您找到了一个简单的解决方案。您必须编辑Sequelize文件,这并不总是一个选项,但它可能会解决您的问题

打开
sequelize/lib/data types.js
,您将看到

DATE.prototype._stringify = function _stringify(date, options) {
  date = this._applyTimezone(date, options);

  return date.format('YYYY-MM-DD HH:mm:ss.SSS Z');
};
date.format()
函数中的
Z
表示“当前时区”,请尝试删除
Z

return date.format('YYYY-MM-DD HH:mm:ss.SSS');

我为你找到了一个骇人的解决方案。您必须编辑Sequelize文件,这并不总是一个选项,但它可能会解决您的问题

打开
sequelize/lib/data types.js
,您将看到

DATE.prototype._stringify = function _stringify(date, options) {
  date = this._applyTimezone(date, options);

  return date.format('YYYY-MM-DD HH:mm:ss.SSS Z');
};
date.format()
函数中的
Z
表示“当前时区”,请尝试删除
Z

return date.format('YYYY-MM-DD HH:mm:ss.SSS');

实际上,您可以告诉sequelize在阅读时不要将其转换为UTC,也可以在写作时提供时区

const sequelize = new Sequelize('db_name', 'postgres', 'postgres', {
  host: '127.0.0.1',
  dialectOptions: {
    useUTC: false //for reading from database
  },
  dialect: 'postgres',
  timezone: '+05:30', // for writng
}); 

实际上,您可以告诉sequelize在阅读时不要将其转换为UTC,也可以在写作时提供时区

const sequelize = new Sequelize('db_name', 'postgres', 'postgres', {
  host: '127.0.0.1',
  dialectOptions: {
    useUTC: false //for reading from database
  },
  dialect: 'postgres',
  timezone: '+05:30', // for writng
}); 

如果时区有多个夏令时偏移量,这将不起作用。这在插入中起作用,但当您选择一个表时,datetime列将返回时区更改!如果时区有多个夏令时偏移量,这将不起作用。这在插入中起作用,但当您选择一个表时,datetime列将返回时区更改!不要编辑Sequelize文件,而是在需要后更改它,如下所示:
let Sequelize=require('Sequelize')Sequelize.DATE.prototype.\u stringify=function(日期,选项){返回此文件。_applyTimezone(日期,选项).format('YYYY-MM-DD HH:MM:ss.SSS')
不编辑Sequelize文件,而是在需要后更改它,如下所示:
让Sequelize=require('Sequelize')Sequelize.DATE.prototype.\u stringify=function\u stringify(DATE,options){返回此值。_applyTimezone(DATE,options).format('YYYY-MM-DD HH:MM:ss.SSS')