• js 关于时间方面的通用函数


    项目中经常需要把数据转换,把经常用到的做过总结:

    一、时间格式化

    export function formatDate (date, fmt) {
      if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
      }
      let o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
      }
      for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
          let str = o[k] + ''
          fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length))
        }
      }
      return fmt
    }
    

     

    二、分钟数转换为小时+分钟

    export function changeHourMinutestr (str) {
      let hours = Math.floor(str / 60).toString()
      let minutes = (str % 60).toString()
      if (str !== '0' && str !== '' && str !== null) {
        return hours + '时' + (minutes.length < 2 ? '0' + minutes : minutes) + '分'
      } else {
        return ''
      }
    }
    

    三、计算天数差的函数

     export function  getDateDiff(start,  end){    
        if (!end) {
          return '借阅中'
        }
        let  aDate,  oDate1,  oDate2,  iDays  
        aDate  =  start.split("-")  
        oDate1  =  new  Date(aDate[0]  +  '/'  +  aDate[1]  +  '/'  +  aDate[2])    //转换为2016/12/18格式  
        aDate  =  end.split("-")  
        oDate2  =  new  Date(aDate[0]  +  '/'  +  aDate[1]  +  '/'  +  aDate[2])  
        iDays  =  Math.ceil(Math.abs(oDate1  -  oDate2)  /  1000  /  60  /  60  /24)    //把相差的毫秒数转换为天数  
        return  iDays  
      } 
    

     

    四、两个时间的差

    例如:计算  开始时间:"2020-11-17 15:22:42",结束时间: "2020-11-21 14:06:51",中间相差时长

    // 两个时间的差
    export function twoTimeInterval(startTime, endTime) {
      // 开始时间
      let d1 = startTime.replace(/-/g, "/");
      let date1 = new Date(d1);
     
      // 结束时间
      let d2 = endTime.replace(/-/g, "/");
      let date2 = new Date(d2);
     
      // 时间相差秒数
      let dateDiff = date2.getTime() - date1.getTime();
     
      // 计算出相差天数
      let days = Math.floor(dateDiff / (24 * 3600 * 1000));
     
      // 计算出小时数
      let residue1 = dateDiff % (24 * 3600 * 1000); // 计算天数后剩余的毫秒数
      let hours = Math.floor(residue1 / (3600 * 1000));
     
      // 计算相差分钟数
      let residue2 = residue1 % (3600 * 1000); // 计算小时数后剩余的毫秒数
      let minutes = Math.floor(residue2 / (60 * 1000));
     
      // 计算相差秒数
      let residue3 = residue2 % (60 * 1000); // 计算分钟数后剩余的毫秒数
      let seconds = Math.round(residue3 / 1000);
     
      let returnVal =
        ((days == 0) ? "" : days+"天") +
        ((hours == 0) ? "" : hours+"时") +
        ((minutes == 0) ? "" : minutes+"分") +
        ((seconds == 0) ? "" : seconds+"秒");
      return returnVal;
    }
    

      

    五、计算两个月份之间的所有月份

    例如: 开始月份: '2018-09',结束月份: '2019-05'

    export function getYearAndMonth(start, end) {
      var result = [];
      var newResult=[];
      var starts = start.split('-');
      var ends = end.split('-');
      var staYear = parseInt(starts[0]);
      var staMon = parseInt(starts[1]);
      var endYear = parseInt(ends[0]);
      var endMon = parseInt(ends[1]);
      while (staYear <= endYear) {
          if (staYear === endYear) {
              while (staMon < endMon) {
                  staMon++;
                  result.push({year: staYear, month: staMon});
              }
              staYear++;
          } else {
              staMon++;
              if (staMon > 12) {
                  staMon = 1;
                  staYear++;
              }
              result.push({year: staYear, month: staMon});
          }
      }
    
      for(var i=0;i<result.length;i++){
        var year=result[i].year;
        var monthinit=result[i].month;
        if(monthinit<10){
          var month='0'+monthinit;
        }else{
          var month=monthinit+'';
        }
        var ym=year+'-'+month;
        newResult.push(ym);
      }
      newResult.unshift(start.replace(/-/g,'-'));//正则去掉横线
    
      return newResult;
    }
  • 相关阅读:
    控制反转容器&依赖注入模式(转)
    基于消息与.Net Remoting的分布式处理架构(转)
    项目文档书写(序)
    jQuery使用手册
    大型社区的设计
    实战之数据结构篇(线性表,堆栈与队列)
    你必须知道的C#的25个基础概念
    SOA架构师注意的问题
    经典语录
    项目文档之(详细设计说明书)
  • 原文地址:https://www.cnblogs.com/wangdashi/p/9964911.html
Copyright © 2020-2023  润新知