Moment.js从MySQL datetime返回不正确的值

时间:2018-02-01 16:25:43

标签: javascript mysql node.js momentjs

MariaDB datetime in field createdAt 5 days off using moment.js library

UTC to CST conversions

从上面架构中的MySQL DB(MariaDB方言)列createdAt获取数据时,将在5天内退回。记录在2018-01-26 9:41 AM和数据库中记录到数据库中。上午9:29,以及2018-01-22 12:51 PM的另一条记录。

我用来在控​​制台中记录结果的代码是:

   let test = moment(post.createdAt)
   console.log('test', test)

post.createdAt是在map函数中,并且应该返回查询中每条记录的正确转换时间(在这种情况下,在DB中上面的屏幕截图中有3条记录)

示例:

moment(post.createdAt) // 2018-01-22 18:53:15
  returns to client console.log:  2018-01-17T18:35:56.000Z

moment(post.createdAt) // 2018-01-26 15:29:41
  returns to client console.log:  2018-01-21T18:36:23.000Z

moment(post.createdAt) // 2018-01-26 15:41:49
  returns to client console.log:  2018-01-21T18:36:23.000Z

我有几个问题:

  1. 为什么在实际登录数据库之前5天将日期返回给客户端?

  2. 返回正确日期和时间的正确方法是什么?我试过了

    矩(post.createdAt).utc()

    moment.tz(post.createdAt)

    moment.parseZone(post.createdAt)

  3. 没有成功。左边的客户端,我只是添加了5天的日期来返回正确的日期,但这似乎不是一个可扩展的方法,我完全坚持如何将时间从登录到数据库的时间转换为CST(芝加哥/美国)

    有人会解释我正在制作的错误吗?也是列createdAt datetime NOT NULL的数据类型。

1 个答案:

答案 0 :(得分:0)

我无法重新创建您的问题。测试代码如下。



console.log(moment('2018-01-22 18:53:15'));
console.log(moment('2018-01-26 15:29:41'));
console.log(moment('2018-01-26 15:41:49'));

console.log(moment('2018-01-22 18:53:15').format('MM/DD/YYYY HH:mm:ss'));
console.log(moment('2018-01-26 15:29:41').format('MM/DD/YYYY HH:mm:ss'));
console.log(moment('2018-01-26 15:41:49').format('MM/DD/YYYY HH:mm:ss'));

<script src="https://momentjs.com/downloads/moment.min.js"></script>
&#13;
&#13;
&#13;