【问题标题】:String to Date mongodb using node.js and moment.js使用 node.js 和 moment.js 的字符串到日期 mongodb
【发布时间】:2015-09-27 16:17:09
【问题描述】:

在我的应用程序中,我允许用户使用日期选择器组件设置日期。

我的问题是当尝试将字符串日期转换为 UTC/ISO 日期格式时,转换没有正确进行,请参见下面的示例。

示例:

用户选择字符串日期:01/09/2015 (DD/MM/YYYY)

虽然我使用 moment.js 将上述日期转换为原生 JS 日期,见下文:

moment(req.body.datePicker,'DD/MM/YYYY')

到目前为止一切都很好,但是当数据存储在 db 中时,日期会减少 1 天。我不知道它在哪里搞砸了。

我已经设法使用jsfiddle-example 创建了一个可重现的场景,请看一下以获得更好的理解。

我的假设:

当我看到 db 集合时,日期以默认时间存储:18:30:00.00Z

这可能是日期更改的原因之一。

【问题讨论】:

    标签: javascript node.js mongodb momentjs


    【解决方案1】:

    您的问题是时区

    在我的情况下,01/09/2015 给出 2015-01-08T23:00:00,因为我的时区是 GMT+1,所以只有 -1 小时

    【讨论】:

    • 但是这个问题的解决方法?默认的 18:30:00.00Z 在这里造成了问题。如果我们可以将时间设置为 00:00:00.00Z,我认为问题可以解决。
    • @FahidMohammad 我怀疑 18:30:00 是默认时间。您的时区不是 GMT+5:30。如果是这样,那么 01/09/2015 给出 2015-01-08T18:30:00 这对我来说很有意义。所以我的回答是指出你的问题,解决方案很简单。 不需要解决方法,因为这不是问题。您只需要像所有其他人一样考虑时区。看看这个momentjs.com/timezone
    【解决方案2】:

    最后,在做了一些研究之后,我自己找到了解决此问题的解决方案或破解方法,这可能不是正确的方法,但对于当前的情况,它就像一个魅力。

    解决方案:

    我所做的只是创建了一个完整的 ISO/UTC 日期字符串,将时间硬编码为零。 moment(req.body.datePicker,'DD/MM/YYYY').format('YYYY-MM-DD HH:mm:ss.000').toString()+'Z' 通过这样做,默认时间将始终设置为零,并且由于字符串是完全限定的 ISO/UTC 标准格式,mongoDB 不会尝试更改它。

    工作示例:

    http://jsfiddle.net/r42jg/1004/

    如果有人有更好的解决方案,请在此处发布,以便我们更好地即兴发挥。

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 2017-11-02
      • 2020-11-14
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多