alert(new Date('2010-11-29'));
Chrome, ff在这方面没有问题,但safari会喊“无效日期”。为什么?
编辑:好的,根据下面的评论,我使用了字符串解析,并尝试了这个:
alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari
编辑2018年3月22日:似乎人们仍然在这里着陆-今天,我会使用moment或date-fns,然后就不用了。Date-fns是非常痛苦的,而且很轻。
使用下面的格式,它可以在所有浏览器上工作
var year = 2016;
var month = 02; // month varies from 0-11 (Jan-Dec)
var day = 23;
month = month<10?"0"+month:month; // to ensure YYYY-MM-DD format
day = day<10?"0"+day:day;
dateObj = new Date(year+"-"+month+"-"+day);
alert(dateObj);
//你的输出看起来像这样“周三3月23日00:00:00 GMT+0530 (IST)”
//注意这将是在当前时区,在这种情况下由IST表示,转换为UTC时区,你可以包括
alert(dateObj.toUTCSting);
//你现在的输出是这样的“Tue, 22 march 2016 18:30:00 GMT”
请注意,现在dateObj以GMT格式显示时间,还请注意日期和时间已相应更改。
“toUTCSting”函数检索格林尼治子午线上的相应时间。它通过建立当前时区与格林威治子午线时区之间的时差来实现这一点。
在上面的例子中,转换前的时间是2016年3月23日00:00小时和分钟。在将GMT+0530 (IST)小时转换为GMT(在这种情况下,它基本上从给定的时间戳中减去5.30小时)后,时间反映了2016年3月22日的18.30小时(正好比第一次时间晚5.30小时)。
进一步将任何日期对象转换为您可以使用的时间戳
alert(dateObj.getTime());
//输出类似于"1458671400000"
这将为您提供时间的唯一时间戳
对于使用date-fns的人,我们可以parseISO日期并使用它来格式化
无效的
import _format from 'date-fns/format';
export function formatDate(date: string, format: string): string {
return _format(new Date(date), format);
}
此函数处理safari抛出无效日期错误。
解决方案
要解决这个问题,我们应该使用:
import _format from 'date-fns/format';
import _parseISO from 'date-fns/parseISO';
export function formatDate(date: string, format: string): string {
return _format(_parseISO(date), format);
}