Date(dateString)和new Date(dateString)之间的区别

我有一些代码试图parsing一个datestring。

当我确实alert(Date("2010-08-17 12:09:36")); 它正确地分析date和一切工作正常,但我不能调用与Date相关的方法,如getMonth()

当我尝试:

 var temp = new Date("2010-08-17 12:09:36"); alert(temp); 

我收到“无效date”错误。

任何想法如何parsing“2010-08-17 12:09:36”与新的date()?

date()

有了这个,你可以调用一个名为Date()的函数。 它不接受任何参数,并返回表示当前date和时间的string。

新date()

有了这个,你正在创build一个新的date实例。

您只能使用以下构造函数:

 new Date() // current date and time new Date(milliseconds) //milliseconds since 1970/01/01 new Date(dateString) new Date(year, month, day, hours, minutes, seconds, milliseconds) 

所以,使用2010-08-17 12:09:36作为参数的构造函数是不允许的。

见w3schools 。


编辑: new Date(dateString)使用这些格式之一:

  • “1975年10月13日11:13:00”
  • “1975年10月13日11:13”
  • “1975年10月13日”

以下格式适用于所有浏览器:

 new Date("2010/08/17 12:09:36"); 

因此,要使yyyy-mm-dd hh:mm:ss格式化的datestring与浏览器完全兼容,您将不得不用斜线replace破折号:

 var dateString = "2010-08-17 12:09:36"; new Date(dateString.replace(/-/g, "/")); 

不同的是,事实上(如果我从ECMA文档中记得)是Date("xx")不创build(在某种意义上)一个新的date对象(实际上它相当于调用( new Date("xx").toString() )。而new Date("xx")实际上会创build一个新的date对象。

了解更多信息:

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf的; 15.9.2

我知道这是旧的,但到目前为止,更简单的解决scheme就是使用

 var temp = new Date("2010-08-17T12:09:36"); 

正确的使用方法Date: https : //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

另外,下面的一段代码显示了如何通过函数“Animal”的一个单一定义,它可以被a)直接调用,并且b)通过将其视为构造函数来实例化

 function Animal(){ this.abc = 1; return 1234; } var x = new Animal(); var y = Animal(); console.log(x); //prints object containing property abc set to value 1 console.log(y); // prints 1234 

任何想法如何parsing“2010-08-17 12:09:36”与新的date()?

在ES5之前,没有浏览器需要支持的string格式,尽pipe有一些被广泛支持的数字。 然而浏览器的支持是不可靠的不一致的,例如一些会允许超出界限的值,另一些则不允许,有些支持某些格式,有些则不支持,等等。

ES5引入了对一些ISO 8601格式的支持,但OP不符合ISO 8601标准,并且所有使用的浏览器都不支持它。

唯一可靠的方法是使用一个小的parsing函数。 以下分析OP中的格式并validation值。

 /* Parse date string in format yyyy-mm-dd hh:mm:ss ** If string contains out of bounds values, an invalid date is returned ** ** @param {string} s - string to parse, eg "2010-08-17 12:09:36" ** treated as "local" date and time ** @returns {Date} - Date instance created from parsed string */ function parseDateString(s) { var b = s.split(/\D/); var d = new Date(b[0], --b[1], b[2], b[3], b[4], b[5]); return d && d.getMonth() == b[1] && d.getHours() == b[3] && d.getMinutes() == b[4]? d : new Date(NaN); } document.write( parseDateString('2010-08-17 12:09:36') + '<br>' + // Valid values parseDateString('2010-08-45 12:09:36') // Out of bounds date ); 

您没有收到“无效date”错误。 相反,临时值是“无效date”。

你的datestring是否有效? 如果您使用Firefox,请检查Date.parse

在Firefox的JavaScript控制台:

 >>> Date.parse("2010-08-17 12:09:36"); NaN >>> Date.parse("Aug 9, 1995") 807944400000 

我会尝试不同的datestring格式。

Zebi,你使用Internet Explorer吗?

我遇到了同样的问题,使用以ISO 8601格式响应的API调用。 在Chrome中工作,这工作:`

 // date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss var date = oDate['events']['event'][0]['start_time']; var eventDate = new Date(); var outputDate = eventDate.toDateString(); 

`

但是这不适用于Firefox。

以上答案帮助我格式正确的Firefox:

  // date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss var date = oDate['events']['event'][0]['start_time']; var eventDate = new Date(date.replace(/-/g,"/"); var outputDate = eventDate.toDateString(); 

我最近遇到了这个,这是一个有用的职位。 我把上面的Topera进一步说了一遍,在Chrome和Firefox中都适用于我:

 var temp = new Date( Date("2010-08-17 12:09:36") ); alert(temp); 

Date()的内部调用返回一个new Date()可以parsing的string。