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#如何不使用递归实现无限层次结构的代码分享[转]
    asp.net mvc2 templates的一篇文章
    asp.net mvc Model验证总结及常用正则表达式
    关于IE的Ajax请求结果缓存的问题
    在ASP.NET MVC中如何让ASCX用户控件具有Action / Controller
    Kubernetes之Pod介绍
    Docker 之Swarm介绍
    Docker之多机网络
    Kubernetes之Pod调度
    Docker之隔离技术
  • 原文地址:https://www.cnblogs.com/imjustice/p/2623912.html
Copyright © 2011-2022 走看看