zoukankan      html  css  js  c++  java
  • JS计算时间差

    计算时间差原理:

    getTime()方法
    方法定义: getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。

    通常我们计算时间差都是通过获取两个时间数据,然后分别使用getTime()方法返回与固定的1970 年 1 月 1 日的时间差,通过对返回毫秒数的差,换算成时间单位,得出两个时间的时间差。

    开始操作:
    首先你会有一串初始的时间数据,然后通过 new Date(你的时间数据),将你的数据转成Date对象的形式。

    var t1="2017/08/28 04:56:38"; //数据
    var dateBegin = new Date(t1);//转化为Date对象的形式
    //Mon Aug 28 2017 04:56:38 GMT+0800 (中国标准时间) 这里就是Date对象的数据形式

    时间格式

    这里的话就要注意一下后端给的时间数据格式的问题,比如下面两种:

    • 第一种:"2017/08/28 04:56:38"//这种格式不用再进行处理
    • 第二种:"2017-08-01 18:56:38"//这种格式就要进行处理

    因为new Date()方法不能处理第二种数据,所以我们这里需要将第二种数据格式转化为第一种数据的格式。

    let t1="2017-05-12 00:13:53";
    let dateBegin = new Date(d1.replace(/-/g, "/"));//replace方法将-转为/

    另一个时间数据:
    既然是时间差的话,就肯定要有两个数据,不然怎么两相比较,一般两个数据中都会有一个当前时间的数据。

    let dateEnd = new Date();//当前时间数据

     

    完整计算时间差(天、小时、分钟、秒)的代码:

    先获取之间的毫秒差,通过毫秒差换算出你所需要的时间单位,然后时间单位之间的换算根据的是他们的倍数关系。

    function timeFn(d1) {//di作为一个变量传进来
    //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
    let dateBegin = new Date(d1.replace(/-/g, "/"));//将-转化为/,使用new Date
    let dateEnd = new Date();//获取当前时间
    let dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
    let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
    let leave1=dateDiff%(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)
    console.log(" 相差 "+dayDiff+""+hours+"小时 "+minutes+" 分钟"+seconds+"")
    console.log(dateDiff+"时间差的毫秒数",dayDiff+"计算出相差天数",leave1+"计算天数后剩余的毫秒数"
    ,hours+"计算出小时数",minutes+"计算相差分钟数",seconds+"计算相差秒数");
    }
    let t3="2017-08-18 04:56:38";
    timeFn(t3);


    不成熟的计算月、年:

    //这里的dayDiff就是上文计算出的天数差
    let monthDiff=Math.floor(dayDiff/30);//以30天为一个月不够精准严谨
    //获取相差的月份
    if (monthDiff<12){
    timeThis=monthDiff+"个月前发布";//获取相差的月份
    return
    }
    let yearDiff=Math.floor(monthDiff/12);//获取相差的年份
    if(yearDiff>=1){
    timeThis=yearDiff+"年前发布";
    return
    }
     

    当天数相差较大的时候,单纯计算天数已经不能满足需求了,因为我们PM说的统一以30天为一个月的分界线,然后这里月份的计算情况感觉很复杂的样子没有继续研究下去。

    获取当前月份的天数
    function getDays() {
    //构造当前日期对象
    var date = new Date();
    var year = date.getFullYear();//获取年份
    var mouth = date.getMonth() + 1;//获取当前月份
    var days;//定义当月的天数;
    if (mouth == 2) {//当月份为二月时,根据闰年还是非闰年判断天数
    days = year % 4 == 0 ? 29 : 28;
    }
    else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
    //月份为:1,3,5,7,8,10,12 时,为大月.则天数为31;
    days = 31;
    }
    else {
    //其他月份,天数为:30.
    days = 30;
    }
    return days;
    }

     

    好文要顶 关注我 收藏该文
  • 相关阅读:
    zabbix 4.0 监控磁盘IO的实施笔记
    梅登黑德定位系统
    sdrplay sdr 支持的sample rate
    记录一下几个中移动可以PING的检测地址及部份DNS设置
    升级mariadb 10后目录权限问题的笔记
    C#单独启动进程的几种方式及使用特点(使用不当导致端口无法释放)
    SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
    C# 处理大量数据的技巧
    C# 几种集合性能比较
    WPF学习网址整理
  • 原文地址:https://www.cnblogs.com/gitnull/p/11496631.html
Copyright © 2011-2022 走看看