moment 中文官網(wǎng)地址:http://momentjs.cn
時(shí)間處理函數(shù)將結(jié)合ts的語(yǔ)法糖,對(duì)moment中的方法進(jìn)行二次封裝,使用更加簡(jiǎn)單快捷,代碼如有更簡(jiǎn)單的的寫(xiě)法,歡迎討論,交流,學(xué)習(xí)。直接上代碼......
import moment from 'moment'
/**
* 格式化日期,返回字符串或 Date 對(duì)象
* @param {string | Date} date -字符串或 Date 對(duì)象
* @param {boolean} isDisplayTime 時(shí)間大于3天時(shí)是否顯示時(shí)分
* @returns {string} - 字符串或 Date 對(duì)象
*/
export const formatDate = (date : string | Date, isDisplayTime : boolean = false) : string | Date => {
const original = moment(date)
// 判斷時(shí)間大小
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}小時(shí)${isBeforeText}`
}
const daysAgo = Math.abs(moment().diff(original, 'days'))
// 判斷是否在今年內(nèi)
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')
}
};
/**
* 檢查的日期是否在指定的時(shí)間范圍內(nèi)
* @param {string} start - 開(kāi)始日期
* @param {string} end - 結(jié)束日期
* @param {string} [check=moment()] - 指定時(shí)間,默認(rèn)為當(dāng)前時(shí)間
* @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);
}
/**
* 根據(jù)指定的日期和相差的天/秒/分/小時(shí)/周/月/年數(shù)獲取另外一個(gè)日期
* @param {string} [dateStr=moment()] - 指定的日期字符串,默認(rèn)為當(dāng)前時(shí)間
* @param {number} diffValue - 相差的天/秒/分/小時(shí)/周/月/年數(shù)
* @param {string} unit - 相差的單位(days, seconds, minutes, hours, weeks, months, years)
* @param {string} format - 返回日期的格式,默認(rèn)為 "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);
};
/**
* 計(jì)算兩個(gè)日期之間的時(shí)間差
* @param {string} startDateStr - 開(kāi)始日期
* @param {string} endDateStr - 結(jié)束日期
* @param {moment.unitOfTime.Diff} unit - 時(shí)間單位(days, seconds, minutes, hours, weeks, months, years)
* @returns {number} - 兩日期相差的時(shí)間數(shù)
*/
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;
};
如果沒(méi)有安裝 moment 模塊,請(qǐng)你自行安裝。