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;
    }

     

    好文要顶 关注我 收藏该文
  • 相关阅读:
    JavaScript操作符instanceof揭秘
    Linux打开txt文件乱码的解决方法
    Working copy locked run svn cleanup not work
    poj 2299 UltraQuickSort 归并排序求解逆序对
    poj 2312 Battle City 优先队列+bfs 或 记忆化广搜
    poj2352 stars 树状数组
    poj 2286 The Rotation Game 迭代加深
    hdu 1800 Flying to the Mars
    poj 3038 Children of the Candy Corn bfs dfs
    hdu 1983 Kaitou Kid The Phantom Thief (2) DFS + BFS
  • 原文地址:https://www.cnblogs.com/gitnull/p/11496631.html
Copyright © 2011-2022 走看看