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

浙公网安备 33010602011771号