我正在为我的学校作业实施一个时钟和一个计时器,为了实现计时器,我决定通过减去计时器开始和当前日期之间的日期来创建它,但是当我这样做时,我得到了总是超过预期的小时(0)。
例如,使用Chrome中集成的控制台:
var d1 = new Date();
undefined
var d2 = new Date();
undefined
var diffDate = new Date(d2.getTime() - d1.getTime());
undefined
diffDate.getHours();
1
当然,在创建d2
之后,我还没有等待一小时来创建d1
。
为什么会这样?
我在某些地方搜索过,但没有人解释这种行为。我想我错过了什么。
答案 0 :(得分:3)
getTime()
返回自1970年1月1日以来的毫秒数。计算d2.getTime() - d1.getTime()
将返回两个new Date()
调用之间的毫秒数。 (如果一个接一个地调用,可能为零)。
new Date(0)
将创建一个Date对象,自1990年1月1日00:00 UTC开始经过0毫秒,但是在本地时区而不是UTC。 getHours()
只会在当地时区设置中返回给定小时,即您所说的“1”。我猜你是GMT +1(英格兰东部)。它与时差无关。
你真的需要用毫秒差异来做一些数学运算,而不是用new Date()
答案 1 :(得分:2)
您的时区正在影响您的约会。我的浏览器中的默认时区是GMT + 530,这是我得到的结果:
var d1 = new Date();
console.log(d1);
// Wed Sep 23 2015 00:54:08 GMT+0530 (IST)
var d2 = new Date();
console.log(d2);
// Wed Sep 23 2015 00:54:21 GMT+0530 (IST)
/*
* Here, diffDate should be (and is!) Thu Jan 01 1970 00:00:00 GMT+000.
* In the local timezone of my browser, it becomes Thu Jan 01 1970 05:30:13 GMT+0530 (IST)
*/
var diffDate = new Date(d2.getTime() - d1.getTime());
console.log(diffDate);
// Thu Jan 01 1970 05:30:13 GMT+0530 (IST)
console.log(diffDate.getHours());
// 5
console.log(diffDate.getUTCHours());
// 0
getUTCHours()
绕过时区,并以UTC格式返回小时数。 diffDate.getUTCHours()
应打印0
。