【问题标题】:Moment.js returning incorrect value from MySQL datetimeMoment.js 从 MySQL 日期时间返回不正确的值
【发布时间】:2018-02-01 16:25:42
【问题描述】:

当从上述架构中的 MySQL DB(MariaDB 方言)列 createdAt 获取数据时,将返回 5 天假。这些记录于 2018 年 1 月 26 日上午 9:41 和上午 9:29 以及另一条记录于 2018 年 1 月 22 日下午 12:51 登录到数据库中。

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

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

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

例子:

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. 返回正确日期和时间的正确方法是什么?我试过了

    moment(post.createdAt).utc()

    moment.tz(post.createdAt)

    moment.parseZone(post.createdAt)

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

谁能解释我犯的错误?还有createdAt datetime NOT NULL 列的数据类型。

【问题讨论】:

  • 需要看一些实际的代码和值,而不是值的图片。
  • 好的,抱歉。我在上面的代码 sn-p 中添加了我用来在控​​制台中记录日期的内容。
  • 你没有抓住重点。 post.createdAt 的实际值是多少?
  • ok 又更新了,上面说的有意义吗?

标签: javascript mysql node.js momentjs


【解决方案1】:

我无法重现您的问题。测试代码如下。

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>

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多