Moment使用

 1 Moment使用

    import moment from 'moment'


    //日期格式化
    console.log(moment().format('YYYY-MM-DD HH:mm:ss'));// 2022-07-06 14:54:46

    //相对时间
    console.log(moment('20111031', 'YYYYMMDD').fromNow());// 11 年前

    //10天前
    console.log(moment().subtract(10, 'days').calendar());// 2022/06/26

    //今天 开始结束时间
    const startTime = moment().startOf('day').format('YYYY/MM/DD HH:mm:ss');// 2022/07/06 00:00:00
    const endTime = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss');// 2022-07-06 23:59:59
    console.log(startTime, endTime);

    //昨天 开始结束时间
    const startTimeY = moment().add(-1, 'days').startOf('day').format('YYYY/MM/DD HH:mm:ss');// 2022/07/05 00:00:00
    const endTimeY = moment().add(-1, 'days').endOf('day').format('YYYY/MM/DD HH:mm:ss');// 2022/07/05 23:59:59
    console.log(startTimeY, endTimeY);

    //本周 开始结束时间
    const startTimeW = moment().week(moment().week()).startOf('week').format('YYYY/MM/DD HH:mm:ss');// 2022/07/04 00:00:00
    const endTimeW = moment().week(moment().week()).endOf('week').format('YYYY/MM/DD HH:mm:ss');// 2022/07/10 23:59:59
    console.log(startTimeW, endTimeW);

    //上周 开始结束时间
    const startTimeWY = moment().week(moment().week() - 1).startOf('week').format('YYYY/MM/DD HH:mm:ss');// 2022/06/27 00:00:00
    const endTimeWY = moment().week(moment().week() - 1).endOf('week').format('YYYY/MM/DD HH:mm:ss');// 2022/07/03 23:59:59
    console.log(startTimeWY, endTimeWY);

    //本月 开始结束时间
    const startTimeM = moment().month(moment().month()).startOf('month').format('YYYY/MM/DD HH:mm:ss');// 2022/07/01 00:00:00
    const endTimeM = moment().month(moment().month()).endOf('month').format('YYYY/MM/DD HH:mm:ss');// 2022/07/31 23:59:59
    console.log(startTimeM, endTimeM);

    //上月 开始结束时间
    const startTimeMY = moment().month(moment().month() - 1).startOf('month').format('YYYY/MM/DD HH:mm:ss');// 2022/06/01 00:00:00
    const endTimeMY = moment().month(moment().month() - 1).endOf('month').format('YYYY/MM/DD HH:mm:ss');// 2022/06/30 23:59:59
    console.log(startTimeMY, endTimeMY);

    //本季度 开始结束时间
    const startTimeQ = moment().quarter(moment().quarter()).startOf('quarter').format('YYYY/MM/DD HH:mm:ss');// 2022/07/01 00:00:00
    const endTimeQ = moment().quarter(moment().quarter()).endOf('quarter').format('YYYY/MM/DD HH:mm:ss');// 2022/09/30 23:59:59
    console.log(startTimeQ, endTimeQ);

    //上季度 开始结束时间
    const startTimeQY = moment().quarter(moment().quarter() - 1).startOf('quarter').format('YYYY/MM/DD HH:mm:ss');// 2022/04/01 00:00:00
    const endTimeQY = moment().quarter(moment().quarter() - 1).endOf('quarter').format('YYYY/MM/DD HH:mm:ss');// 2022/06/30 23:59:59
    console.log(startTimeQY, endTimeQY);

    //本年 开始结束时间
    const startTimeYy = moment().year(moment().year()).startOf('year').format('YYYY/MM/DD HH:mm:ss');// 2022/01/01 00:00:00
    const endTimeYy = moment().year(moment().year()).endOf('year').format('YYYY/MM/DD HH:mm:ss');// 2022/12/31 23:59:59
    console.log(startTimeYy, endTimeYy);

    //上年 开始结束时间
    const startTimeYyY = moment().year(moment().year() - 1).startOf('year').format('YYYY/MM/DD HH:mm:ss');// 2021/01/01 00:00:00
    const endTimeYyY = moment().year(moment().year() - 1).endOf('year').format('YYYY/MM/DD HH:mm:ss');// 2021/12/31 23:59:59
    console.log(startTimeYyY, endTimeYyY);

1.1 转换时间戳

moment().format('X') // (大写X)以秒为单位,返回值为字符串类型
moment().format('x') // (小写x)以毫秒为单位,返回值为字符串类型
moment().valueOf()   //   以毫秒为单位,返回值为数值型

1.2 时间戳转换成时间

moment(时间戳).format("YYYY-MM-DD")

1.3 获取当前的年月日时分秒

moment().toArray() // [years, months, date, hours, minutes, seconds, milliseconds]
moment().toObject() // {years: xxxx, months: x, date: xx ...}

可参考文档:moment.js 的常用方法-CSDN博客

### 使用 Moment 插件进行时间计算的指南 #### 计算两个日期之间的差异 Moment.js 提供了一个 `.diff()` 方法,可以用来计算两个日期之间的时间差。该方法支持多种单位,例如年、月、日、小时、分钟和秒等。 ```javascript // 示例:计算两个日期之间的差异 const startTime = moment("2024-10-29 15:10:00"); const endTime = moment("2024-10-31 16:10:00"); // 时间差以年为单位 const yearsDiff = endTime.diff(startTime, 'years'); // 时间差以月为单位 const monthsDiff = endTime.diff(startTime, 'months'); // 时间差以天为单位 const daysDiff = endTime.diff(startTime, 'days'); // 时间差以小时为单位 const hoursDiff = endTime.diff(startTime, 'hours'); // 时间差以分钟为单位 const minutesDiff = endTime.diff(startTime, 'minutes'); // 时间差以秒为单位 const secondsDiff = endTime.diff(startTime, 'seconds'); ``` 以上代码展示了如何使用 `moment().diff()` 方法来获取两个日期间的具体时间差距[^1]。 --- #### 特定情况下的时间差计算 如果仅需关注某些特定单位(如天数),而忽略其他更细粒度的时间部分,则可通过指定参数实现精确控制。 ```javascript // 示例:只计算两天之间的天数差异 const dayDifference = moment("2024-10-31 16:10:00").diff("2024-10-29 15:10:00", 'day'); console.log(dayDifference); // 输出结果应为 2 天 ``` 这里需要注意的是,在这种情况下,即使实际时间跨越了不同的小时或分钟,只要它们属于同一天范围之内就不会计入最终的结果中[^2]。 --- #### 自定义格式化输出 除了基本的时间运算外,还可以利用 `moment.format()` 对所得的数据进一步加工成易于理解的形式展示出来。 ```javascript // 获取当前时刻并换成不同样式的字符串表示形式 const currentTimeFormattedYearMonthDayHourMinuteSecondChineseStyle = moment().format("YYYY年MM月DD日 HH:mm:ss"); const currentTimeFormattedStandardISO8601Style = moment().format("YYYY-MM-DDTHH:mm:ssZ"); const customFormatExample = moment().format("YYYY/MM/DD/HH/mm/ss"); console.log(currentTimeFormattedYearMonthDayHourMinuteSecondChineseStyle ); // e.g., 2023年12月12日 11:18:43 console.log(currentTimeFormattedStandardISO8601Style ); // e.g., 2023-12-12T11:18:43+08:00 console.log(customFormatExample ); // e.g., 2023/12/12/11/18/43 ``` 这允许开发者灵活调整显示样式满足各种需求场景下的一致性和用户体验考虑[^3]。 --- #### 结合业务逻辑的实际应用案例 假设有一个应用场景需要判断某个活动是否已经结束以及距离结束还有多久? ```javascript function getActivityStatus(activityEndTime){ let now=moment(); let end=moment(activityEndTime); if(now.isAfter(end)){ return "已结束"; }else{ var duration={ year:end.diff(now,'year'), month:end.diff(now,'month',true)%12, day:end.diff(now,'day',true)%30, hour:end.diff(now,'hour',true)%24, minute:end.diff(now,'minute',true)%60, second:end.diff(now,'second',true)%60 }; return `${duration.year} 年 ${Math.floor(duration.month)} 个月 ${Math.floor(duration.day)} 天 ` +`${Math.floor(duration.hour)} 小时 ${Math.floor(duration.minute)} 分钟 ${Math.round(duration.second)} 秒 后结束`; } } console.log(getActivityStatus('2025-07-15')); // 根据当前时间和设定好的截止日期动态给出状态描述 ``` 上述例子综合运用到了之前提到过的多个知识点,能够很好地服务于现实世界中的复杂定时任务管理等问题解决过程之中[^1]^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值