代码之家  ›  专栏  ›  技术社区  ›  Rainer Plumer

节点续集-按原样插入日期而不转换为UTC

  •  0
  • Rainer Plumer  · 技术社区  · 7 年前

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

    Insert into table (somedate) values ('2018-06-11 23:59:00')
    

    但Sequelize将其执行为

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

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   AbhinavD    7 年前

    你可以在阅读的时候告诉你不要把它转换成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
    }); 
    
        2
  •  1
  •   VTodorov    7 年前

    我给你找到了一个破烂的解决办法。你必须编辑一个续集文件,这并不总是一个选项,但它可以解决你的问题。

    正常开放 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');
    };
    

    这个 Z date.format() 函数表示“当前时区”,请尝试删除 Z :

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