在JS中格式化字符串到日期

时间:2016-09-05 18:21:41

标签: javascript node.js string date

我确定这是一个简单的问题,但我不能为我的生活解决它。

我有一个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]);
    }

但只要我记录它就会显示无效的日期。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

你可以做什么

moment("your date string") 

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

答案 2 :(得分:1)

这里的东西并不像看起来那样,因为在Chrome和Node.JS中调用日期构造函数会为我返回正确的日期。我也在下面的JSBin中尝试过它。

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

我会将值记录到日期构造函数中,只是为了确保使用的值具有正确的格式。您是否还可以提供此脚本用于进一步测试的节点版本..

答案 3 :(得分:0)

您的循环已损坏,您似乎正在尝试从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,但这可能会因您需要而过度杀伤。还有许多其他适用的解析和格式化库也适用。