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是非常痛苦的,而且很轻。


当前回答

正如@nizantz前面提到的,在Safari中使用Date.parse()对我来说不起作用。经过一番研究,我了解到File对象的lastDateModified属性已弃用,Safari不再支持它。使用File对象的lastModified属性解决了我的问题。当然不喜欢在网上发现不好的信息。

感谢所有在这篇文章中做出贡献的人,他们帮助我走上了我需要了解的问题的道路。如果没有这些信息,我可能永远也不会发现我的根本问题。也许这能帮助到和我处境相似的人。

其他回答

我在Safari浏览器中也遇到了同样的问题

var date = new Date("2011-02-07");
console.log(date) // IE you get ‘NaN’ returned and in Safari you get ‘Invalid Date’

解决方案如下:

var d = new Date(2011, 01, 07); // yyyy, mm-1, dd  
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss  
var d = new Date("02/07/2011"); // "mm/dd/yyyy"  
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"  
var d = new Date(1297076700000); // milliseconds  
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC 

要让解决方案在大多数浏览器上都能工作,您应该使用这种格式创建日期对象

(year, month, date, hours, minutes, seconds, ms)

例如:

dateObj = new Date(2014, 6, 25); //UTC time / Months are mapped from 0 to 11
alert(dateObj.getTime()); //gives back timestamp in ms

工作良好的IE, FF, Chrome和Safari。甚至是更老的版本。

IE开发中心:日期对象(JavaScript)

Mozilla Dev Network:日期

对于使用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);
}

我也有同样的问题。然后我用了moment. js .问题消失了。

当从字符串创建moment时,我们首先检查字符串是否 匹配已知的ISO 8601格式,然后返回到新的日期(字符串)如果 找不到已知格式。 警告:浏览器对解析字符串的支持不一致。因为 没有关于应该支持哪种格式、支持什么格式的规范 在某些浏览器中的工作将不能在其他浏览器中工作。 为了在解析除ISO 8601字符串以外的任何字符串时得到一致的结果, 你应该使用字符串+格式。

e.g.

var date= moment(String);

正如@nizantz前面提到的,在Safari中使用Date.parse()对我来说不起作用。经过一番研究,我了解到File对象的lastDateModified属性已弃用,Safari不再支持它。使用File对象的lastModified属性解决了我的问题。当然不喜欢在网上发现不好的信息。

感谢所有在这篇文章中做出贡献的人,他们帮助我走上了我需要了解的问题的道路。如果没有这些信息,我可能永远也不会发现我的根本问题。也许这能帮助到和我处境相似的人。