JavaScript中的Date类型-计算时间差


接触JavaScript不久,今日想写一个简单的秒表练练手,于是就想当然的写下了如下代码:


var date = new Date(currTime.getTime() - beginTime.getTime());
// currTime.getTime()=1329655993149 beginTime.getTime()=1329655991421
var hour = date.getHours();

结果比较出乎我的意料,hour变量的值并不是我所期望的,hour的值是8currTimebeginTime变量实际的时间差也就2秒钟哪来的8个小时?!经过一番思索和搜索,我发现原因是因为在JavaScript中并没有类似于TimeSpan这种类型的变量,而DateTime类型又是从197011日开始计时的。

所以我生成的那个date变量其实是197011001728毫秒,Date所存的毫秒数有是独立于时区的,是一个UTC+0的时间。当我的浏览器调用getHours()函数时,将这个时间转换成我本地设置的时区也就是UTC+8,所以得到的时间是197011801728毫秒。这就是为什么会得到8的原因了。

JavaScript中如果需要计算两个时间的差只能乖乖的通过将两个时间相减得到一个毫秒差,然后手动计算得到。写了一个timeSpan伪类来将时间差转换为有意义的时间。

function timeSpan(msec) {
    var milliseconds = msec;
    this.getDays = function () {
        return Math.floor(this.getHours() / 24);
    }
    this.getHours = function () {
        return Math.floor(this.getMinutes() / 60);
    }
    this.getMinutes = function () {
        return Math.floor(this.getSeconds() / 60);
    }
    this.getSeconds = function () {
        return Math.floor(milliseconds / 1000);
    }
    //以下是获取时间间隔的具体部分?
    this.getMillisecondPart = function () {
        return milliseconds - this.getSeconds() * 1000;
    }
    this.getSecondPart = function () {
        return this.getSeconds() - 60 * this.getMinutes();
    }
    this.getMinutePart = function () {
        return this.getMinutes() - 60 * this.getHours();
    }
    this.getHourPart = function () {
        return this.getHours() - 24 * this.getDays();
    }
}

 

posted @   imjustice  阅读(1803)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示