我正在开发基于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
差异从哪里来?
您的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