项目中经常需要把数据转换,把经常用到的做过总结:
一、时间格式化
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; }