为什么javascript中的日期无效?

时间:2011-02-04 20:25:04

标签: javascript oop

为什么以下表达式无效?

var hello = new Date(2010, 11, 17, 0, 0, 0, 0);

例如,hello.UTC()不起作用。

3 个答案:

答案 0 :(得分:4)

var hello = new Date(2010, 11, 17, 0, 0, 0, 0);
console.log(hello.toUTCString());

var hello2 = Date.UTC(2010, 11, 17, 0, 0, 0, 0);
console.log(hello2);

这两个实际上是两个不同的功能,打印出不同的东西。

toUTCString() - 根据通用时间

将Date对象转换为字符串

其中

Date.UTC() - 根据世界时间,返回1970年1月1日午夜以来日期字符串中的毫秒数。

如果您尝试计算自1-1-1970午夜以来日期字符串中的毫秒数,则必须使用Date.UTC();。但是,如果您尝试以不同的形式获取新日期的属性(2010,11,17,0,0,0,0);那么你将不得不使用自己的构造函数方法(toUTCString()getUTCMilliseconds()等)。

UTC似乎是Date构造函数本身的成员,而不是Date实例的成员。因此,为了调用UTC,您必须使用Date.UTC(); Date()将当前时间转换为字符串,根据通用时间和Date.UTC()检索并使用从1月1日开始以毫秒为单位计算的值,1970 00:00:00世界时(UTC)。所以,它们就像一个“静态”功能。

此外,在JavaScript中,只要您使用'new'关键字创建新对象(实例化),构造函数的this值就会指向新的Object。所以,你好可以有一个自己的日期,与Date()相反,或Date.UTC() this指向不同的范围(全球我认为),它将根据{ 1-1-1970 00:00:00或返回调用Date函数的时间。另一方面,Object hello将具有一个基本日期,该日期用new Date(2010, 11, 17, 0, 0, 0, 0)实例化,其中包含一组构造的方法(toUTCString();等)。使用传递的属性作为基本“日期”值,this指向新对象的新日期。

说完所有这些,hello.UTC()正在访问一个不是其构造函数成员的函数,因此不起作用。这是JavaScript中OOP的一部分。这一切都在我的头脑中,如果你正在读这个,可能有点模糊。如果我有错误,请纠正我。

答案 1 :(得分:3)

  

因为UTC是一种静态方法   日期,你总是把它用作Date.UTC(),   而不是作为日期的方法   你创建的对象。

来源:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC

答案 2 :(得分:1)

这对我有用:

var hello = new Date(2010, 11, 17, 0, 0, 0, 0);
window.alert( hello.toUTCString() );