Stange javascript特定日期的日期行为

时间:2017-09-01 09:33:10

标签: javascript angularjs date

我注意到在这个特定的日期里有一个奇怪的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

这是怎么回事?

编辑:

&#13;
&#13;
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;
&#13;
&#13;

我实施了这个粗略的方法来解析我的约会,但我不知道怎么回事 有什么帮助吗?

2 个答案:

答案 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。它可能就像您的浏览器默认日期格式一样。

您可以在下面查看提醒结果。

&#13;
&#13;
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;
&#13;
&#13;

编辑:

您应该在转换前交换月份和日期。试试以下代码

&#13;
&#13;
 

var date= "31-12-2017 23:59:59".split("-");

var newDate = date[1] +"-" +date[0] +"-" +date[2];

alert(new Date(newDate));
&#13;
&#13;
&#13;