简介

官方解释moment.js是JavaScript 日期处理类库,也就是用于日期格式转换的。官网地址:http://momentjs.cn/

下载

  1. npm install moment --save # npm
  2. yarn add moment # Yarn
  3. Install-Package Moment.js # NuGet
  4. spm install moment --save # spm
  5. meteor add momentjs:moment # meteor
  6. bower install moment --save # bower (废弃)

基础用法

  1. 日期格式化
  2. moment().format('MMMM Do YYYY, h:mm:ss a'); // 九月 29日 2022, 5:26:19 下午
  3. moment().format('dddd'); // 星期四
  4. moment().format("MMM Do YY"); // 9月 29日 22
  5. moment().format('YYYY [escaped] YYYY'); // 2022 escaped 2022
  6. moment().format(); // 2022-09-29T17:26:19+08:00
  7. 相对时间
  8. moment("20111031", "YYYYMMDD").fromNow(); // 11 年前
  9. moment("20120620", "YYYYMMDD").fromNow(); // 10 年前
  10. moment().startOf('day').fromNow(); // 17 小时前
  11. moment().endOf('day').fromNow(); // 7 小时内
  12. moment().startOf('hour').fromNow(); // 26 分钟前
  13. 日历时间
  14. moment().subtract(10, 'days').calendar(); // 2022/09/19
  15. moment().subtract(6, 'days').calendar(); // 上星期五17:26
  16. moment().subtract(3, 'days').calendar(); // 上星期一17:26
  17. moment().subtract(1, 'days').calendar(); // 昨天17:26
  18. moment().calendar(); // 今天17:26
  19. moment().add(1, 'days').calendar(); // 明天17:26
  20. moment().add(3, 'days').calendar(); // 下星期日17:26
  21. moment().add(10, 'days').calendar(); // 2022/10/09
  22. 多语言支持
  23. moment.locale(); // zh-cn
  24. moment().format('LT'); // 17:26
  25. moment().format('LTS'); // 17:26:19
  26. moment().format('L'); // 2022/09/29
  27. moment().format('l'); // 2022/9/29
  28. moment().format('LL'); // 2022年9月29日
  29. moment().format('ll'); // 2022年9月29日
  30. moment().format('LLL'); // 2022年9月29日下午5点26分
  31. moment().format('lll'); // 2022年9月29日 17:26
  32. moment().format('LLLL'); // 2022年9月29日星期四下午5点26分
  33. moment().format('llll'); // 2022年9月29日星期四 17:26

应用

指定日期比对

思路:先使用moment转换格式截取 YYYY-MM-DD hh:mm:ss等其中一部分变为字符串,然后再用moment转回成对象

然后diff方法只针对截取的部分转换成的时或分或秒进行比对
下面代码可以进一步优化
比如下需求:
image.png
天,范围是-2到2 格式:xx 12:00
天,范围是大于或小于2天,前提是年份一致 格式:04-23

  1. // 比较时间差
  2. // dateOrigin 如果是
  3. export function formatDateText(dateOrigin) {
  4. console.log(typeof dateOrigin === 'string')
  5. if(!dateOrigin) return;
  6. let today = moment(new Date()).format('YYYY-MM-DD')
  7. let date = null
  8. let dateOriginMoment = null;
  9. if(typeof dateOrigin === 'string') {
  10. date = moment(dateOrigin).format('YYYY-MM-DD')
  11. dateOriginMoment = moment(dateOrigin);
  12. } else {
  13. console.log(dateOrigin)
  14. date = dateOrigin.format('YYYY-MM-DD')
  15. dateOriginMoment = dateOrigin;
  16. }
  17. today = moment(today)
  18. date = moment(date)
  19. console.log(today, date)
  20. // let date = this.moment(dates.format('YYYY-MM-DD'), 'YYYY-MM-DD')
  21. const diff_minute = date.diff(today, "minutes");
  22. const diff_hour = date.diff(today, "hours");
  23. const diff_day = date.diff(today, "days");
  24. const diff_month = date.diff(today, "months");
  25. const diff_year = date.diff(today, "years");
  26. console.log(diff_minute, diff_hour,diff_day,diff_month, diff_year)
  27. // 年比较
  28. if(diff_year === 0) { //年份一样
  29. if(diff_month === 0) { // 月份一样
  30. let msg = ''
  31. switch (diff_day) {
  32. case 2:
  33. msg = '后天'
  34. break;
  35. case 1:
  36. msg = '明天'
  37. break;
  38. case 0:
  39. msg = '今天'
  40. break;
  41. case -1:
  42. msg = '昨天'
  43. break;
  44. case -2:
  45. msg = '前天'
  46. break;
  47. default:
  48. break;
  49. }
  50. if(msg) {
  51. return msg+ ' ' + dateOriginMoment.format('HH:mm')
  52. }
  53. return dateOriginMoment.format('MM-DD HH:mm')
  54. }
  55. return dateOriginMoment.format('MM-DD HH:mm')
  56. } else { // 如果年份不一样 2022-09-28 12:00
  57. return dateOriginMoment.format('YYYY-MM-DD HH:mm')
  58. }
  59. }