我注意到在这个特定的日期里有一个奇怪的javascript行为
"31-12-2017 23:59:59"
我有一个API,我调用它并返回一些日期作为字符串,我必须使用js将它们转换为日期。
我的代码就是那样
while (i<array.length){
array[i].start_date = new Date (array[i].start_date);
array[i].start_date.setHours(array[i].start_date.getHours()+1);
array[i].start_date = $filter('date')(array[i].start_date, "dd-MM-yyyy HH:mm:ss");
array[i].end_date = new Date (array[i].end_date);
array[i].end_date.setHours(array[i].end_date.getHours()+1);
array[i].end_date = $filter('date')(array[i].end_date, "dd-MM-yyyy HH:mm:ss");
$scope.insSupplies.push(array[i]);
i++;
};
其中array是API,我在质疑。
这里的问题是当我的代码尝试这个
时array[i].end_date = new Date (array[i].end_date);
在这个日期
"31-12-2017 23:59:59"
array[i].end_date
变为Invalid Date
这是怎么回事?
编辑:
var date = "31-12-2017 23:59:59"
var dateSplitted = date.split("-");
var dateInverted = dateSplitted[1] +"-" +dateSplitted[0] +"-"+dateSplitted[2];
dateSplitted = dateInverted.split(" ");
alert(dateSplitted[0]+"T"+dateSplitted[1]+"Z");
alert(new Date(dateSplitted[0]+"T"+dateSplitted[1]+"Z"));
&#13;
我实施了这个粗略的方法来解析我的约会,但我不知道怎么回事 有什么帮助吗?
答案 0 :(得分:7)
该日期不是Date
对象需要解析的任何格式,也不是即使不需要也支持的格式。
要解析的仅格式Date
是ISO-8601子集defined by the specification。该格式的日期为"2017-12-31T23:59:59"
。
由于历史原因,xx-xx-xxxx
通常被视为美国格式的日期(即使在非美国语言环境中),这是MM-DD-YYYY
而不是更合理的格式DD-MM-YYYY
在美国境外常见。但即使这样也不是普遍的,也没有具体说明。唯一没有指定的格式,但是,据我所知,通用是DD/MM/YYYY
(美国格式)。
答案 1 :(得分:2)
我不知道这里发生了什么问题。但解决方案是您的月份和日期格式被错误地转换。
您的日期格式应为12-31-2017 23:59:59
而非31-12-2017 23:59:59
。比如mm/dd/yyyy
。它可能就像您的浏览器默认日期格式一样。
您可以在下面查看提醒结果。
alert(new Date("12-31-2017 23:59:59"))// this is a correct format.
alert(new Date("31-12-2017 23:59:59"))// here `31` is month. The default month count is 12. but here it's automatically add 19 months into 12 month(31-12). So it will go to future year.
alert(new Date("13-12-2017 23:59:59"))// here you can check the result of Jan month 2018
&#13;
您应该在转换前交换月份和日期。试试以下代码
var date= "31-12-2017 23:59:59".split("-");
var newDate = date[1] +"-" +date[0] +"-" +date[2];
alert(new Date(newDate));
&#13;