moment 中文官网地址:http://momentjs.cn
时间处理函数将结合ts的语法糖,对moment中的方法进行二次封装,使用更加简单快捷,代码如有更简单的的写法,欢迎讨论,交流,学习。直接上代码......
import moment from 'moment'
/**
* 格式化日期,返回字符串或 Date 对象
* @param {string | Date} date -字符串或 Date 对象
* @param {boolean} isDisplayTime 时间大于3天时是否显示时分
* @returns {string} - 字符串或 Date 对象
*/
export const formatDate = (date : string | Date, isDisplayTime : boolean = false) : string | Date => {
const original = moment(date)
// 判断时间大小
const isTime = moment().isBefore(original)
const isBeforeText = isTime ? '后' : '前'
const secondsAgo = Math.abs(moment().diff(original, 'seconds'))
if (secondsAgo < 60) {
return `${secondsAgo}秒${isBeforeText}`
}
const minutesAgo = Math.abs(moment().diff(original, 'minutes'))
if (minutesAgo < 60) {
return `${minutesAgo}分钟${isBeforeText}`
}
const hoursAgo = Math.abs(moment().diff(original, 'hours'))
if (hoursAgo < 24) {
return `${hoursAgo}小时${isBeforeText}`
}
const daysAgo = Math.abs(moment().diff(original, 'days'))
// 判断是否在今年内
const isYears = moment(date).isSame(new Date(), 'year')
if (daysAgo <= 3) {
return `${daysAgo}天${isBeforeText}`
} else if (daysAgo > 3 && isYears) {
return isDisplayTime ? original.format('MM/DD HH:mm') : original.format('MM/DD')
} else {
return original.format('YYYY/MM/DD')
}
};
/**
* 检查的日期是否在指定的时间范围内
* @param {string} start - 开始日期
* @param {string} end - 结束日期
* @param {string} [check=moment()] - 指定时间,默认为当前时间
* @returns {boolean} - 返回布尔值
*/
export const isTimeBetween = (start : string, end : string, check : string = moment().format("YYYY-MM-DD HH:mm:ss")) : boolean => {
const [momentCheck, momentStart, momentEnd] = [check, start, end].map(date => moment(date, "YYYY-MM-DD HH:mm:ss"));
return momentCheck.isBetween(momentStart, momentEnd);
}
/**
* 根据指定的日期和相差的天/秒/分/小时/周/月/年数获取另外一个日期
* @param {string} [dateStr=moment()] - 指定的日期字符串,默认为当前时间
* @param {number} diffValue - 相差的天/秒/分/小时/周/月/年数
* @param {string} unit - 相差的单位(days, seconds, minutes, hours, weeks, months, years)
* @param {string} format - 返回日期的格式,默认为 "YYYY-MM-DD"
* @returns {string} - 格式化的新日期字符串
*/
export const getDateByDiff = (
dateStr : string = moment().format(),
diffValue : number,
unit : "days" | "seconds" | "minutes" | "hours" | "weeks" | "months" | 'years',
format : string = "YYYY-MM-DD"
) : string => {
const momentDate = moment(dateStr, "YYYY-MM-DD HH:mm:ss");
const newMomentDate = momentDate.add(diffValue, unit);
return unit === "seconds" ||
unit === "minutes" ||
unit === "hours"
? newMomentDate.format("YYYY-MM-DD HH:mm:ss")
: newMomentDate.format(format);
};
/**
* 计算两个日期之间的时间差
* @param {string} startDateStr - 开始日期
* @param {string} endDateStr - 结束日期
* @param {moment.unitOfTime.Diff} unit - 时间单位(days, seconds, minutes, hours, weeks, months, years)
* @returns {number} - 两日期相差的时间数
*/
export const getTimeDiffBetweenDates = (startDateStr : string, endDateStr : string, unit : moment.unitOfTime.Diff) : number => {
const startDate = moment(startDateStr);
const endDate = moment(endDateStr);
const diff = endDate.diff(startDate, unit);
return diff;
};
如果没有安装 moment 模块,请你自行安装。
{{item.user_info.nickname ? item.user_info.nickname : item.user_name}}
作者 管理员 企业
{{itemf.name}}
{{itemc.user_info.nickname}}
{{itemc.user_name}}
回复 {{itemc.comment_user_info.nickname}}
{{itemf.name}}