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

Ris*_*shi 49 javascript date

我有一些代码试图解析日期字符串.

当我这样做alert(Date("2010-08-17 12:09:36")); 它正确解析日期,一切正常,但我不能调用相关的方法Date,如getMonth().

当我尝试:

var temp = new Date("2010-08-17 12:09:36");
alert(temp);
Run Code Online (Sandbox Code Playgroud)

我收到"无效日期"错误.

关于如何用新Date()解析"2010-08-17 12:09:36"的任何想法?

Top*_*era 60

日期()

有了这个,你调用一个调用的函数Date().它不接受任何参数并返回表示当前日期和时间的字符串.

新日期()

有了这个,你就是在创建一个新的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)
Run Code Online (Sandbox Code Playgroud)

因此,2010-08-17 12:09:36不允许使用构造函数作为参数.

w3schools.


编辑:new Date(dateString)使用以下格式之一:

  • "1975年10月13日11:13:00"
  • "1975年10月13日11:13"
  • "1975年10月13日"

  • 另外在chrome和firefox中,新的Date()工作方式不同.例如,"yyyy-mm-dd hh:mm:ss"适用于chrome但不适用于firefox. (2认同)
  • @FelixKling,你忘了用'new'关键字给Date打电话.新日期('2014-05-01 00:00:00')确实为您提供了正确的5月1日日期. (2认同)

Dag*_*all 36

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

new Date("2010/08/17 12:09:36");
Run Code Online (Sandbox Code Playgroud)

因此,要使yyyy-mm-dd hh:mm:ss格式化的日期字符串完全兼容浏览器,您必须使用斜杠替换短划线:

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


小智 6

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

了解更多信息:

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


The*_*ser 5

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

var temp = new Date("2010-08-17T12:09:36");
Run Code Online (Sandbox Code Playgroud)

  • 仅仅因为它在 Safari 中失败并不意味着它没有正确使用 JavaScript。我也没有 Safari 来测试这个,但我不知道为什么这种无处不在的东西会在某些浏览器中运行,而在其他浏览器中不起作用。无论如何,它绝对不值得投反对票。 (3认同)