【问题标题】:Formatting String to Date in JS在 JS 中将字符串格式化为日期
【发布时间】:2016-09-05 18:21:40
【问题描述】:

我确信这是一个简单的问题,但我无法终生解决它。

我有一个 JSON 对象:

    {
    "_id": {
        "$oid": "57cb5aac9bd9a31100c793d1"
    },
    "reminders": [
        "2014-03-12T12:00:00",
        "2014-03-12T13:37:27",
        "2014-03-12T13:37:27",
        "2014-03-12T22:14:27"
    ],
    "user": "xxx"
}

我想将提醒中的日期解析为JS循环中的日期对象,如此。

for (var i = userSchedule.reminders.length - 1; i >= userSchedule.reminders.length - 1; i++)
    {
    var date = new Date(userSchedule.reminders[i]);
    }

但是每当我记录它时它只会显示无效日期。有什么想法吗?

【问题讨论】:

  • 不推荐使用 Date 构造函数解析字符串,因为它很大程度上依赖于实现。您可能会在 node.js 中侥幸逃脱,但不要在浏览器中尝试。 “2014-03-12T12:00:00”应该被视为 ES5+ 的本地,但当前的 Safari 9(至少)将其视为 UTC。

标签: javascript node.js string date


【解决方案1】:

虽然它没有答案,但你为什么使用 user_schedule.remindersuserSchedule.reminders 并且你的 for 循环只会循环一次正确的数据,因为你的循环以 i=3; 开始,它是索引userSchedule.reminders[3] 的最后一个元素,当您循环下一个时,它将超出数组提醒的范围

【讨论】:

    【解决方案2】:

    这里有些事情不像看起来那样,因为在 Chrome 和 Node.JS 中调用日期构造函数都会为我返回正确的日期。下面的JSBin我也试过了。

    https://jsbin.com/fomagugiwe/edit?html,output

    我会将值记录到日期构造函数中,以确保所使用的值具有正确的格式。您能否还提供您用于此脚本的 Node 版本以进行进一步测试..

    【讨论】:

    • 我做了同样的事情,所有的作品。我认为错误已解决,这是一个错误的循环,它永远不会遍历数组,因为它的停止条件永远不会实现。
    【解决方案3】:

    对于日期时间操作,我强烈建议使用http://momentjs.com

    你可以在哪里做

    moment("your date string") 
    

    或者

    moment("your date string","your date format") 
    

    【讨论】:

    • MomentJS 似乎是对这样一个简单的 javascript 日期问题的大锤响应。
    • MomentJS 如果日期将用于某些取决于时区的处理,例如计划任务,那么它是一件好事。在这种情况下,我认为这超出了他的需要。
    • 这不是答案。它没有解释 OPs 问题或为什么答案可以解决它。
    • 他问如何解析字符串到日期,如果这个方法可以解决他的问题,那么这是一个有效的答案
    【解决方案4】:

    您的循环已损坏,您似乎正在尝试从 0 迭代到 userSchedule.reminders.length - 1,所以:

    for (var i=0; i < userSchedule.reminders.length; i++) {
      // do stuff
    }
    

    此外,由于实现方式的差异,不建议使用 Date 构造函数(和 Date.parse,它们等效于解析)解析日期字符串。您应该手动解析字符串,如果您只有一种格式要解析,库可以提供帮助,但不是必需的。

    像“2014-03-12T12:00:00”这样的日期字符串应被视为“本地”(即在计算时间值时应使用主机时区偏移量),但并非所有实现都会这样做。像fecha.js 这样的小型库让它变得简单:

    var d = fecha.parse('2014-03-12T12:00:00','YYYY-MM-DDTHH-mm-ss');
    

    您也可以使用moment.js,但对于您的需要,这可能有点过头了。还有许多其他适用的解析和格式化库。

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多