我正在为我的学校作业实现一个时钟和一个计时器,为了实现计时器,我决定通过减去计时器开始日期和当前日期之间的日期来创建它,但是当我这样做时,我得到的总是比预期的小时多一个小时(0)。
例如,使用Chrome中集成的控制台:
var d1 = new Date();
undefined
var d2 = new Date();
undefined
var diffDate = new Date(d2.getTime() - d1.getTime());
undefined
diffDate.getHours();
1当然,在创建d1之后,我没有等待一个小时来创建d1。
为什么会发生这种情况?
我在一些地方搜索过,但没有一个地方能解释这种行为。我想我遗漏了一些东西。
发布于 2015-09-23 03:28:09
getTime()返回自1970年1月1日以来的毫秒数。计算d2.getTime() - d1.getTime()将返回两次new Date()调用之间的毫秒数。(如果一个接一个地调用,可能是零)。
new Date(0)将在自1/1/1970 00:00UTC以来所经过的0毫秒内创建一个Date对象,但使用的是您当地的时区,而不是UTC。getHours()只返回您本地时区设置中该时间点的给定小时,您说的是"1“。我猜你是在GMT +1 (英格兰以东一点)。这与时差无关。
您确实需要计算毫秒差,而不是使用new Date()创建新的时间点
发布于 2015-09-23 03:25:59
您的时区正在影响您的日期。我浏览器中的默认时区是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()绕过时区,返回协调世界时的小时数。diffDate.getUTCHours()应打印0。
https://stackoverflow.com/questions/32724966
复制相似问题