Stange javascript特定日期的日期行为

Ano*_*non 3 javascript date angularjs

我注意到在这个特定的日期上有一个奇怪的javascript行为

"31-12-2017 23:59:59"
Run Code Online (Sandbox Code Playgroud)

我有一个我调用的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++;
                    };
Run Code Online (Sandbox Code Playgroud)

数组是我正在质疑的API.

这里的问题是当我的代码尝试这个时

array[i].end_date = new Date (array[i].end_date);
Run Code Online (Sandbox Code Playgroud)

在这个日期

"31-12-2017 23:59:59"
Run Code Online (Sandbox Code Playgroud)

array[i].end_dateInvalid 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"));
Run Code Online (Sandbox Code Playgroud)

我实现了这个粗略的方法来解析我的日期,但我不知道怎么回事任何帮助?

T.J*_*der 7

该日期不是Date对象需要解析的任何格式,也不是即使不需要也常用的格式.

需要解析的唯一格式Date规范定义的ISO-8601子集.那个日期,就是那种格式"2017-12-31T23:59:59".

由于历史原因,xx-xx-xxxx通常被视为美国格式的日期(即使在非美国语言环境中),这MM-DD-YYYY不是美国以外常见的更合理的格式DD-MM-YYYY.但即使这样也不是普遍的,也没有具体说明.未指定的,但唯一的格式,据我所知,通用的是DD/MM/YYYY(美国再次格式).