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;
}
原文地址:https://www.cnblogs.com/wangdashi/p/9964911.html