首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减去两个如此接近的日期会产生一种明显的奇怪行为

减去两个如此接近的日期会产生一种明显的奇怪行为
EN

Stack Overflow用户
提问于 2015-09-23 03:08:43
回答 2查看 50关注 0票数 1

我正在为我的学校作业实现一个时钟和一个计时器,为了实现计时器,我决定通过减去计时器开始日期和当前日期之间的日期来创建它,但是当我这样做时,我得到的总是比预期的小时多一个小时(0)。

例如,使用Chrome中集成的控制台:

代码语言:javascript
复制
var d1 = new Date();
undefined

var d2 = new Date();
undefined

var diffDate = new Date(d2.getTime() - d1.getTime());
undefined

diffDate.getHours();
1

当然,在创建d1之后,我没有等待一个小时来创建d1

为什么会发生这种情况?

我在一些地方搜索过,但没有一个地方能解释这种行为。我想我遗漏了一些东西。

EN

回答 2

Stack Overflow用户

发布于 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()创建新的时间点

票数 3
EN

Stack Overflow用户

发布于 2015-09-23 03:25:59

您的时区正在影响您的日期。我浏览器中的默认时区是GMT+530,下面是我得到的结果:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32724966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档