1

我有以下日期,我将其转换为长格式。这在 chrome 中运行良好,但在使用 firefox 时出现错误。日期对象表示无效日期。下面的代码在 chrome 上正常工作时有什么问题?

startdate= "2013-08-23 14:59"
alert(startdate);
startdate = new Date(startdate);
alert(startdate);     //Invalid date
startdate = startdate.getTime();
alert(startdate);     //NAN

http://jsfiddle.net/hulk_hulk/kvtW3/

4

5 回答 5

2

ECMAScript 语言规范描述了Date构造函数内部使用Date.parse的,它接受日期时间字符串格式,这是 ISO 8601 扩展格式的简化。

"2013-08-23 14:59"与该格式不匹配,因此 Firefox 无法解析。但是某些实现可以解析其他格式,例如您的 Chrome。

考虑使用JavaScript 日期解析器/格式化程序库来实现浏览器兼容性。您可以轻松地从 SO/Google 找到数百万个库。

从规格

15.9.3.2 新日期(值):

如果 Type(v) 是 String,则将 v 解析为日期,其方式与解析方法 (15.9.4.2) 完全相同;设 V 为该日期的时间值。

15.9.4.2 日期解析(字符串):

该函数首先尝试根据日期时间字符串格式(15.9.1.15)中调用的规则解析字符串的格式。如果字符串不符合该格式,则函数可能会退回到任何特定于实现的启发式或特定于实现的日期格式。

15.9.1.15 日期时间字符串格式:

ECMAScript 基于 ISO 8601 扩展格式的简化定义了日期时间的字符串交换格式。格式如下:YYYY-MM-DDTHH:mm:ss.sssZ

于 2013-08-23T10:01:10.363 回答
2

试试这个方法。。

startdate="2013-08-23 14:59:00"
var a=startdate.split(" ");
var d=a[0].split("-");
var t=a[1].split(":");
startdate= new Date(d[0],(d[1]-1),d[2],t[0],t[1],t[2]);
alert(startdate);     //correct date
startdate = startdate.getTime();
alert(startdate);

希望是有用的,适用于 IE FF Chrome 等。

于 2013-08-23T10:02:27.227 回答
1

使用库来处理跨多个平台的一致日期解析。像这个。

https://code.google.com/p/datejs/

于 2013-08-23T09:54:26.803 回答
0

Javascript 日期支持多种格式尝试其中任何一种..!!

将代码更改为此可能会有所帮助

startdate= "23 09 2013, 14:59:00"
alert(startdate);
startdate = new Date(startdate);
alert(startdate);     //Invalid date
startdate = startdate.getTime();
alert(startdate);  

您还可以按以下格式设置值 尝试任何这种格式

date1 = new Date("25 Dec, 1995 23:15:00")
date2 = new Date("2009 06 12,12:52:39")
date3 = new Date("20 09 2006,12:52:39")

在此处查看JavaScript 日期详细信息

于 2013-08-23T10:06:45.310 回答
0

Firefox 想要 new Date(),这样试试:

    startdate= "2013-08-23 14:59"
    alert(startdate);

    startdate = new Date(2013,08,23,14,59,00,00);

    alert(startdate);     //Invalid date
    startdate = startdate.getTime();
    alert(startdate);     //NAN
于 2013-08-23T09:58:14.173 回答