Javascriptdate在iOS上无效

我正在开发基于Phonegap的iOS应用程序,这已经为Android完成了。 下面的代码适用于Android,但不适用于iOS。 为什么?

var d = new Date("2015-12-31 00:00:00"); console.log(d.getDate() + '. ' + d.getMonth() + ' ' + d.getFullYear(); 

Android的结果:

 31.11 2015 

iOS上的结果:

 NaN. NaN NaN 

差异从哪里来?

Solutions Collecting From Web of "Javascriptdate在iOS上无效"

您的datestring没有指定为使用new Date的格式。 该规范中唯一的格式是ISO-8601的简化版本 ,但是这只是在ES5中添加的,因此支持可能会触及到。 你的string不是这种格式,但是非常接近。

如果你改变空间到T ,你会在规范:

 var dateString = "2015-12-31 00:00:00"; var d = new Date(dateString.replace(' ', 'T')); 

(我假设你实际上没有使用string,因此replace调用。)

请注意,在ES2015(ES6)中纠正了ES5规范中的错误:当string上没有时区指示符时会发生什么情况。 在ISO-8601中,没有指示符表示“本地时间”,但是ES5规范表示默认为Z (GMT)。 他们将其固定在ES2015规范中,但不幸的是一些JavaScript引擎遵循ES5规范,而其他JavaScript引擎遵循ISO-8601(现在ES2015),所以为了实现跨浏览器的支持,您需要包含时区指示器,否则您不知道是否将被解释为GMT或当地时间。 您可以使用Z来表示格林尼治标准时间(GMT)或者+/-然后使用HH:MM来计算偏移量。 ( CST这样的缩写是不允许的,因为没有标准。)

如果他们还不支持这一点,即使它没有logging,但对YYYY/MM/DD HH:MM:SS几乎都有支持。 所以:

 var dateString = "2015-12-31 00:00:00"; var d = new Date(dateString.replace(/-/g, '/')); 

我不能告诉你为什么。 也许是因为iOS不支持JavaScriptdatefunction以及Android,还是支持不同的格式?

但是我可以给你一个解决方法:

 var s = "2015-12-31 00:00:00".split(" ")[0].split("-"), d = new Date( s[0], s[1], s[2], 0, 0, 0 ); console.log(d); 

 var s = "2015-12-31 00:00:00".replace(/[ :]/g, "-").split("-"), d = new Date( s[0], s[1], s[2], s[3], s[4], s[5] ); console.log(d); 

试试var d = new Date("2015/12/31 00:00:00"); 为我工作。

 var d = new Date("2015/12/31 00:00:00"); 

为我工作:)

谢谢@dda