Safari中的dateparsing在safari和chrome中是不同的

我有以下代码

var c = new Date(Date.parse("2011-06-21T14:27:28.593Z")); console.log(c); 

在Chrome上,它正确地打印出控制台上的date。 在Safari中失败。 谁是正确的,更重要的是什么是处理这个问题的最好方法?

你不能真的使用Date.parse。 我build议你使用: new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )

要分割string,你可以尝试

 var s = '2011-06-21T14:27:28.593Z'; var a = s.split(/[^0-9]/); //for (i=0;i<a.length;i++) { alert(a[i]); } var d=new Date (a[0],a[1]-1,a[2],a[3],a[4],a[5] ); alert(s+ " "+d); 

我倾向于避免Date.parse ,根据这个问题的其他答案。 这似乎不是一个可靠的方式来处理date。

相反,我使用了类似下面的函数。 这使用jQuery将string数组映射到一个数组中,但这是一个非常容易的依赖删除/更改。 我还包括我认为合理的默认设置,允许您使用相同的functionparsing2007-01-092007-01-09T09:42:00

 function dateFromString(str) { var a = $.map(str.split(/[^0-9]/), function(s) { return parseInt(s, 10) }); return new Date(a[0], a[1]-1 || 0, a[2] || 1, a[3] || 0, a[4] || 0, a[5] || 0, a[6] || 0); } 

我结束了使用库来抵消这一点:

http://zetafleet.com/blog/javascript-dateparse-for-iso-8601

一旦包含了该库,就可以使用此代码创build新的date:

 var date = new Date(Date.parse(datestring)); 

我们的项目没有使用毫秒说明符,但我不认为这会给你带来问题。

我已经在几个浏览器中检查过了,是的,safari会返回invalid date 。 顺便说一句,你不必在这里使用Date.parse ,只是new Date([datestring])也可以。 Safari显然需要更多的格式来提供你的datestring。 如果你用'/'replace' – ',删除T和点(.593Z)后的所有内容,它会给你一个有效的date。 此代码已经过testing,可在Safari中使用

 var datestr = '2011-06-21T14:27:28.593Z'.split(/[-T.]/); var safdat = new Date( datestr.slice(0,3).join('/')+' '+datestr[3] ); 

或者使用String.replace(...)

 new Date("2016-02-17T00:05:01+0000".replace(/-/g,'/').replace('T',' ').replace(/(\..*|\+.*/,"")) 

我使用下面的函数来parsing与时区的date。 适用于Chrome和Safari:

 function parseDate(date) { const parsed = Date.parse(date); if (!isNaN(parsed)) { return parsed; } return Date.parse(date.replace(/-/g, '/').replace(/[az]+/gi, ' ')); } console.log(parseDate('2017-02-09T13:22:18+0300')); // 1486635738000 time in ms 

我试图通过截断它和parsing它,它与safari和IOS工作正常。

 var dateString = "2016-01-22T08:18:10.000+0000"; var hours = parseInt(dateString.split("+")[1].substr("0","2")); var mins = parseInt(dateString.split("+")[1].substr("2")); var date = new Date(dateString.split("+")[0]); date.setHours(date.getHours()-hours); date.setMinutes(date.getMinutes()-mins);