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 模块,请你自行安装。
1、发布新帖子,每发布一条帖子可获得20个经验,每天最多可获取200个经验;
2、发布新回复,每发布一条回复可获得10个经验,每天最多可获取200个经验;
3、发布的帖子被管理员设置为精华帖,每被加精一次可获得10个经验,无上限;
4、发布帖子被回复一条,加2个经验,无上限;
5、发布帖子被点赞一个或发布评论被点赞加5个经验,无上限;
6、论坛首页大神积分排行榜,统计90天以内获取的累积经验值进行排序。
7、技术社区经验和官方商城用户经验同步,累计经验值会提升商城会员等级,购买官方商城产品享受对应会员等级折扣