1. 日期格式化
/* * 日期格式化 * 使用方式: * let date = new Date() * dateFormat("YYYY-mm-dd HH:MM:SS", date) * 2019-06-06 19:45:11 * let date1 = new Date() * dateFormat("YYYY/mm/dd", date1) * 2019/11/08 */export const dateFormat = (fmt, date) => { let ret; let opt = { "Y+": date.getFullYear().toString(), // 年 "m+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "M+": date.getMinutes().toString(), // 分 "S+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt;}
2. 时间戳转化为日期格式
/*
* 时间戳转化为日期格式
* 参数一:时间戳
* 参数二:分隔符 如'/','-'
* timeStampTurnTime(new Date().getTime()/1000)
* 2019-11-08 16:52:42
* timeStampTurnTime(new Date().getTime()/1000,'/')
* 2019/11/08 16:52:42
*/
export const timeStampTurnTime = (timeStamp,fmt='-') => {
if(timeStamp > 0){
var date = new Date();
date.setTime(timeStamp * 1000);
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + fmt + m + fmt + d+' '+h+':'+minute+':'+second;
}
}
3. 时间戳显示为多少分钟、小时、天前
/**
* 时间戳显示为多少分钟前,多少天前的JS处理
* @param { number } timestamp
*/
export function dateDiff(timestamp) {
// 补全为13位
var arrTimestamp = (timestamp + '').split('');
for (var start = 0; start < 13; start++) {
if (!arrTimestamp[start]) {
arrTimestamp[start] = '0';
}
}
timestamp = arrTimestamp.join('') * 1;
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
// var halfamonth = day * 15;
var month = day * 30;
var now = new Date().getTime();
var diffValue = now - timestamp;
// 如果本地时间反而小于变量时间
if (diffValue < 0) {
return '不久前';
}
// 计算差异时间的量级
var monthC = diffValue / month;
var weekC = diffValue / (7 * day);
var dayC = diffValue / day;
var hourC = diffValue / hour;
var minC = diffValue / minute;
// 数值补0方法
var zero = function (value) {
if (value < 10) {
return '0' + value;
}
return value;
};
// 使用
if (monthC > 12) {
// 超过1年,直接显示年月日
return (function () {
var date = new Date(timestamp);
return date.getFullYear() + '年' + zero(date.getMonth() + 1) + '月' + zero(date.getDate()) + '日';
})();
} else if (monthC >= 1) {
return parseInt(monthC) + "月前";
} else if (weekC >= 1) {
return parseInt(weekC) + "周前";
} else if (dayC >= 1) {
return parseInt(dayC) + "天前";
} else if (hourC >= 1) {
return parseInt(hourC) + "小时前";
} else if (minC >= 1) {
return parseInt(minC) + "分钟前";
}
return '刚刚';
};
// 使用方式
dateDiff(Date.now())
"刚刚"
dateDiff(1621384034000)
"2小时前"
dateDiff(1621390814000)
"7分钟前"
dateDiff(1621304714000)
"1天前"
dateDiff(1616034314000)
"2月前"
dateDiff(1584498314000)
"2020年03月18日"
4. 格式化时间 下午 08:12 | 昨日 09:12 | 2019-12-03 20:12
/**
* 格式化时间 下午 08:12 | 昨日 09:12 | 2019-12-03 20:12
* @param {Date} time 输入Unix时间戳
* @return {Object} 格式化结果
*/
export function fnFormatTimeHeader(time) {
// 格式化传入时间
let date = new Date(parseInt(time)),
year = date.getUTCFullYear(),
month = date.getUTCMonth(),
day = date.getDate(),
hour = date.getHours(),
minute = date.getUTCMinutes()
// 获取当前时间
let currentDate = new Date(),
currentYear = date.getUTCFullYear(),
currentMonth = date.getUTCMonth(),
currentDay = currentDate.getDate()
// 计算是否是同一天
if (currentYear == year && currentMonth == month && currentDay == day) { //同一天直接返回
if (hour > 12) {
return `下午 ${hour}:${minute < 10 ? '0' + minute : minute}`
} else {
if (hour >= 10) {
return `上午 ${hour}:${minute < 10 ? '0' + minute : minute}`
} else {
return `上午 0${hour}:${minute < 10 ? '0' + minute : minute}`
}
}
}
// 计算是否是昨天
let yesterday = new Date(currentDate - 24 * 3600 * 1000)
// console.log('123', day , yesterday.getDate())
// console.log(month , yesterday.getUTCMonth())
if (year == yesterday.getUTCFullYear() && month == yesterday.getUTCMonth() && day == yesterday.getDate()) { //昨天
return `昨天 ${hour >= 10 ? hour : '0' + hour}:${minute < 10 ? '0' + minute : minute}`
} else {
return `${year}-${month + 1}-${day} ${hour}:${minute < 10 ? '0' + minute : minute}`
}
}
// 使用方式
fnFormatTimeHeader(1621384034000)
"上午 08:27"
fnFormatTimeHeader(1621304714000)
"昨天 10:25"
fnFormatTimeHeader(1584498314000)
"2020-3-18 10:25"
5. 更加详细的日期转化(年月日|时分秒|星期|季度)
/**
* 日期时间格式化
* {{ Date() | formatDate }} -> 2020-09-28 15:54:52
* {{ '2020/10/01 12:30:45' | formatDate('yyyy-MM-dd hh:mm:ss w') }} -> 2020-10-01 12:30:45 星期四
* @param {Date} value 可以被 new Date(value) 解析的时间格式,如 Date()、2020/10/01、2020-10-01 12:00 等
* @param {String} fmt 格式化模版
*/
export const formatDate = (value, fmt = 'yyyy-MM-dd hh:mm:ss') => {
const date = new Date(value)
const o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'w+': date.getDay(), // 星期
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
S: date.getMilliseconds(), // 毫秒
}
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
}
for (var k in o) {
if (k === 'w+') {
if (o[k] === 0) {
fmt = fmt.replace('w', '星期日')
} else if (o[k] === 1) {
fmt = fmt.replace('w', '星期一')
} else if (o[k] === 2) {
fmt = fmt.replace('w', '星期二')
} else if (o[k] === 3) {
fmt = fmt.replace('w', '星期三')
} else if (o[k] === 4) {
fmt = fmt.replace('w', '星期四')
} else if (o[k] === 5) {
fmt = fmt.replace('w', '星期五')
} else if (o[k] === 6) {
fmt = fmt.replace('w', '星期六')
}
} else if (new RegExp(`(${k})`).test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length),
)
}
}
return fmt
}