cqwcns 发表于 2019-10-4 11:36

分享JS计算两个时间差的代码

整理了个代码,用于计算两个时间之间的耗时,功能完全实现了,但感觉写得很累赘,不知道有没有更优的写法。欢迎大家砸砖。


                var TimeStart = new Date("2019/10/4 11:50:23");   //开始时间
                var TimeEnd = new Date("2019/10/6 12:52:28");   //结束时间
                let date3 = TimeEnd.getTime() - TimeStart.getTime();   //时间差的毫秒数

                        
                let days = Math.floor(date3 / (24 * 3600 * 1000));         //计算出小时数
                let leave1 = date3 % (24 * 3600 * 1000);   //计算天数后剩余的毫秒数
                let hours = Math.floor(leave1 / (3600 * 1000));         //计算相差分钟数
                let leave2 = leave1 % (3600 * 1000);         //计算小时数后剩余的毫秒数
                let minutes = Math.floor(leave2 / (60 * 1000));         //计算相差秒数
                let leave3 = leave2 % (60 * 1000);       //计算分钟数后剩余的毫秒数
                let seconds = Math.round(leave3 / 1000);
               
                var vHaoShi = "";
                if (days != 0) {               //加IF语句组装,避免出现0天0时这种无意义的输出
                        vHaoShi += days + "天 ";
                };
                if (hours != 0) {
                        vHaoShi += hours + "小时 ";
                };
                if (minutes != 0) {
                        vHaoShi += minutes + " 分钟";
                };
                vHaoShi += seconds + " 秒";
   
                console.log(vHaoShi);

kbzxzzm 发表于 2019-10-4 11:48

function dateFormat(timestamp) {
      var time = new Date(parseInt(timestamp));
      var y = time.getFullYear();
      var m = time.getMonth() + 1;
      m = m > 9 ? m : '0' + m;
      var d = time.getDate();
      d = d > 9 ? d : '0' + d;
      var h = time.getHours();
      h = h > 9 ? h : '0' + h;
      var mm = time.getMinutes();
      mm = mm > 9 ? mm : '0' + mm;
      var s = time.getSeconds();
      s = s > 9 ? s : '0' + s;
      return y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + s;
    }

cqwcns 发表于 2019-10-4 12:18

kbzxzzm 发表于 2019-10-4 11:48
function dateFormat(timestamp) {
      var time = new Date(parseInt(timestamp));
      var y = tim ...

不一样吧{:1_924:}你这个是返回格式化时间,1楼的代码是计算时间差。

xiaohui888 发表于 2019-10-4 12:52

两个时间变成时间截,然后时间截计算回时间更加方便吧!!不懂JS,易语言可以用时间截计算。

银河魔装机神 发表于 2019-10-4 15:58

学到了。

fire_flag 发表于 2019-10-4 16:15

本帖最后由 fire_flag 于 2019-10-4 16:17 编辑


var date = new Date(时间戳); //获取一个时间对象

/**
1. 下面是获取时间日期的方法,需要什么样的格式自己拼接起来就好了
2. 更多好用的方法可以在这查到 -> http://www.w3school.com.cn/jsref/jsref_obj_date.asp
*/
date.getYear();// 获取年份
date.getMonth();// 获取月份(0-11,0代表1月,用的时候记得加上1)
date.getDate();// 获取日(1-31)
date.getTime();// 获取时间(从1970.1.1开始的毫秒数)
date.getHours();// 获取小时数(0-23)
date.getMinutes();// 获取分钟数(0-59)
date.getSeconds();// 获取秒数(0-59)

行不?

无瑕黑心肠 发表于 2019-10-5 03:32

本帖最后由 无瑕黑心肠 于 2019-10-5 21:49 编辑

/**
* 计算时间差异
* 注意:本函数不会检查时间的正确性,请保证新的时间大于旧的时间并且两个都是有效时间
* @paramObject Date oldtime 旧的时间
* @paramObject Date newtime 新的时间
* @return String            返回时间差异文本,只计算(天、小时、分钟、秒)
*/
function calcTimeDiff(oldtime, newtime) {
        let timeDiffNum = newtime - oldtime;
        let timeDiff = new Date(timeDiffNum + 314208e5);

        let dayDiff = Math.floor(timeDiffNum / 864e5);
        let hourDiff = timeDiff.getHours();
        let minuteDiff = timeDiff.getMinutes();
        let secondDiff = timeDiff.getSeconds();

        let timeStr = (dayDiff == 0 ? "" : dayDiff + "天");
        timeStr += (hourDiff == 0 ? "" : hourDiff + "小时");
        timeStr += (minuteDiff == 0 ? "" : minuteDiff + "分钟");
        timeStr += (secondDiff == 0 ? "" : secondDiff + "秒");
        return timeStr;
}

let timeStart = new Date("2019/10/4 4:50:23");
let timeEnd = new Date("2019/10/5 0:52:28");
let timeDiff = calcTimeDiff(timeStart, timeEnd);
console.log(timeDiff);

cqwcns 发表于 2019-10-5 14:34

无瑕黑心肠 发表于 2019-10-5 03:32
/**
* 计算时间差异
* 注意:本函数不会检查时间的正确性,请保证新的时 ...

这。。。难道是我不会用?{:301_1009:}

无瑕黑心肠 发表于 2019-10-5 21:54

cqwcns 发表于 2019-10-5 14:34
这。。。难道是我不会用?

感谢发现bug。这个是我以前用来计算两日时分秒差异的函数,没想到加个天数没做好处理,大意了{:1_896:}
不过值得庆幸的是,现在这个问题已经修复了!
页: [1]
查看完整版本: 分享JS计算两个时间差的代码