关于 JavaScript new Date() 和 Date.parse()

IT技术 javascript date
2021-02-23 20:11:26
var exampleDate='23-12-2010 23:12:00';  

我想将上面的字符串转换为 adate并尝试了几件事:

var date = new Date(exampleDate); //returns invalid Date
var date1 = Date.parse(exampleDate); //returns NAN

这段代码在IE和 中运行良好Opera,但date 返回一个无效的Date并且在 Firefox 中date1返回NAN我该怎么办?

6个回答

您示例中的字符串不是浏览器可识别的任何标准格式。ECMAScript 规范要求浏览器只能解析一种标准格式:

格式如下: YYYY-MM-DDTHH:mm:ss.sssZ

此格式包括仅日期格式:

YYYY

YYYY-MM

YYYY-MM-DD

它还包括带有可选时区偏移量的仅时间形式:

THH:mm

THH:mm:ss

THH:mm:ss.sss

还包括“日期时间”,它可以是上述的任意组合。

如果 String 不符合该格式,该函数可能会回退到任何特定于实现的启发式或特定于实现的日期格式。无法识别的字符串或包含格式为 String 的非法元素值的日期将导致 Date.parse 返回 NaN。

所以在你的例子中, using2010-12-23T23:12:00是唯一保证有效的字符串。在实践中,大多数浏览器也允许格式为日期DD Month YYYYMonth DD, YYYY,因此像23 Dec 2010这样的字符串Dec 23, 2010也可以工作。

在撰写此答案时,日期字符串的解析取决于实现,因此没有 “保证工作”的字符串。此后,没有时区的 ISO 8601 长格式字符串被要求被符合 ES5 的浏览器(如 Firefox)解析为 UTC,并被符合 ECMA 2015 的浏览器(如 Chrome 和 Safari)解析为本地。所有 3 种行为都可以在当前使用的浏览器(2015 年)中看到,例如 IE8 返回 NaN,Firefox 40 将其视为 UTC,Chrome 44 将其视为本地。所以仍然没有“保证工作”的字符串。
2021-04-16 20:11:26

以上格式仅在 IE 和 Chrome 中支持。

所以尝试使用其他格式。以下是一些格式和支持浏览器。

<script type="text/javascript">

//var dateString = "03/20/2008";  // mm/dd/yyyy [IE, FF]

 var dateString = "2008/03/20";  // yyyy/mm/dd [IE, FF]
// var dateString = "03-20-2008";  // mm-dd-yyyy [IE, Chrome]
// var dateString = "March 20, 2008";  // mmmm dd, yyyy [IE, FF]
// var dateString = "Mar 20, 2008";  // mmm dd, yyyy [IE, FF]

// Initalize the Date object by passing the date string variable
var myDate = new Date(dateString);
alert(myDate); 
</script>
这不应该是公认的答案,请参阅 casablancas 答案
2021-04-22 20:11:26

您可以使用正则表达式手动解析它,然后使用日期元素调用日期构造函数,如下所示:

var parseDate = function(s) {
  var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/;
  var m = re.exec(s);
  return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null;
};
var dateStr = '23-12-2010 23:12:00';
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800

JavaScript 至少应该支持从以下日期字符串转换:

* yyyy/MM/dd
* MM/dd/yyyy
* MMMM dd, yyyy
* MMM dd, yyyy

尝试:

  var exampleDate='12/23/2010 23:12:00';
  var date = new Date(exampleDate); 

使用datejs和此代码:

var exampleDate='23-12-2010 23:12:00';
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss');

myDate应该是一个正确构造的Date对象。