zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    期货结算 期货算法公式
    c# websocket 服务端,客户端 兼容低版本IE,支持超长数据传输 附源码
    翻译API translate api 翻译文档api 百度翻译
    asp.net c# 网页 导出excel 多表格 多个sheet
    创建单线程单元 asp.net下使用WebBrowser
    c++ 修改内存
    c++ int to byte
    webservice 第一节 .net SoapHeader验证
    myeclipse maven编译出错
    java用正则表达式获取domain
  • 原文地址:https://www.cnblogs.com/imjustice/p/2623912.html
Copyright © 2011-2022 走看看