Moment.js常用方法总结

782 阅读5分钟

1.初始化日期/时间

初始化日期:

moment().format('YYYY-MM-DD');

初始化日期 时间:

moment().format('YYYY-MM-DD HH:mm:ss');

2.格式化日期/时间

格式化日期:

moment(value).format('YYYY-MM-DD');

自定义格式化:

moment(value).format('YYYY年MM月DD日');

格式化日期时间:

moment(value).format('YYYY-MM-DD HH:mm:ss');

3.加/减 操作之前必须使用moment(日期变量);将要操作的日期转化为moment.js可以处理的日期格式

加法:

moment().add(1, 'months').format('YYYY-MM-DD');
// 当前日期加一个月并输出格式为'YYYY-MM-DD'

加法:

moment(startDate).add(2, 'days').format('YYYY-MM-DD');
// 指定日期(startDate)加2天并输出格式为 'YYYY-MM-DD'

减法:

moment().subtract(7, 'days');
// 当前时间减去7天

减法:

moment(startDate).subtract(2, 'days').format('YYYY-MM-DD');
// 指定日期(startDate)减去2天并输出格式 为 'YYYY-MM-DD'

4.获取某年某月的第一天或者最后一天

获取某年某月的第一天:startOf('month')、startOf('year')

moment(日期).startOf('month').format("YYYY-MM-DD");
// 日期可以是 年月的格式 也可以是年月日的格式
moment(日期).startOf('year').format("YYYY-MM-DD");

获取某年某月的最后一天:endOf('month')、endOf('year')

moment(日期).endOf('month').format("YYYY-MM-DD");
// 日期可以是 年月的格式 也可以是年月日的格式
moment(日期).endOf('year').format("YYYY-MM-DD");

5.获取星期几

获取星期几: moment().day() 或 moment(startDate).day()

moment().format("E");
// 格式化输出当前星期几
 moment(value).locale('zh-cn').format('MM月DD日 ddd HH:mm')
 // ddd 表示周几
// day, weekday 结果为 0 ~ 6,0:周日,6:周六
// isoWeekday 结果为 1 ~ 7,1:周一,7:周日
moment().day();moment().weekday(); moment().isoWeekday();

6.获取毫秒数

获取毫秒数:moment().valueOf() 或 moment(startDate).valueOf() 在获取指定时间的毫秒数时,必须要有日期。即startDate包括日期时间

7.获取时间差(以毫秒计算)

两个日期/时间的时差:

moment(endTime).diff(moment(startTime),'days' )

开始时间和结束时间的时间差,以“天”为单位;endTime和startTime都是毫秒数

moment(endTime).diff(moment(startTime), 'minutes')

开始时间和结束时间的时间差,以“分钟”为单位

注意:计算时间差时,可以以 “years”、“days”、“hours”、“minutes” 以及 "seconds" 为单位输出!

8.两个具体日期之差

  console.log("===dateArr", dateArr);
  const date_min = moment(dateArr[0]);
  const date_max = moment(dateArr[dateArr.length - 1]);
  const day_diff = date_max.diff(date_min, "days");
  console.log("===day_diff", day_diff);
// 这里的dateArr是一个数组,第一个装的是小的,第二个装的是大的

9.获取时分秒

原理:利用字符串的 split 方法拆分时分秒,然后分别用moment的 hour、minute 和 second 方法;带有日期的可以用 .valueof() 方法。

const fixStart = '08:00:00'
 
const getHour = moment().hour(Number(fixStart.split(':')[0]));
const getMinute = moment().minute(Number(fixStart.split(':')[1]));
const getSecond = moment().second(Number(fixStart.split(':')[2]));
            
// 描述为0,直接写出second(0)
const getHour_Minute_Second = moment().hour(Number(fixStart.split(':')[0])).minute(Number(fixStart.split(':')[1])).second(0);       
 
console.log('=====输出',getHour,getMinute,getSecond,getHour_Minute_Second);

10.将毫秒数转化为时分秒

注意:毫秒转为其他单位时,达到你想要转的单位时,为1,超过时不管,不足时为0;

如4800000(80分钟),转为天:0

                                               转为小时:1

                                               转为分钟:20

                                               转为秒:0
const msTime = 4800000;        //80分钟
 
moment.duration(msTime).hours();       //转为小时,值为1
moment.duration(msTime).minutes();     //转为分钟,值为20
moment.duration(msTime).seconds();     //转为秒,值为0

转为其他单位:

moment.duration(msTime, 'seconds');        //转为秒
moment.duration(msTime, 'minutes');        //转为分
moment.duration(msTime, 'hours');          //转为小时
moment.duration(msTime, 'days');           //转为天
moment.duration(msTime, 'weeks');          //转为周
moment.duration(msTime, 'months');         //转为月
moment.duration(msTime, 'years');          //转为年

对应的显示格式:

keyShorthand
yearsy
monthsm
weeksw
daysd
hoursh
minutesm
secondss
millisecondsms

11.判断一个日期是否在两个日期之间 isBetween

语法: moment().isBetween(moment-like, moment-like, String, String);

a. 不包含起始这两个日期(只有两个参数) 中文网只有两个参数

moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true
moment('2010-10-19').isBetween('2010-10-19', '2010-10-25'); // false
moment('2010-10-25').isBetween('2010-10-19', '2010-10-25'); // false

b. 自定义是否包含起始日期(四个参数,主要是第四个参数) 英文网才有四个参数

第三个参数,固定为null;

第四个参数,字符串,( ) 表示不包含,[ ] 表示包含。右括号制开始日期,右括号控制结束日期

moment('2016-10-30').isBetween('2016-10-30', '2016-12-30', null, '()'); //false
moment('2016-10-30').isBetween('2016-10-30', '2016-12-30', null, '[)'); //true
moment('2016-10-30').isBetween('2016-01-01', '2016-10-30', null, '()'); //false
moment('2016-10-30').isBetween('2016-01-01', '2016-10-30', null, '(]'); //true
moment('2016-10-30').isBetween('2016-10-30', '2016-10-30', null, '[]'); //true

12.判断一个日期是否在另外一个日期前 isBefore

语法: moment( end ).isBefore( start )

a. 默认比较日期

注意:两个日期相同是,结果也是 false

moment('2022-04-20').isBefore('2022-04-25');  // true  => 第一个日期在第二个日期前
moment('2022-04-28').isBefore('2022-04-25');  // false => 第一个日期不在第二个日期前
moment('2022-04-25').isBefore('2022-04-25');  // false => 两个日期相同

b. 第二个参数用于确定精度,因此可以指定检查年份、月份、日期

moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true

转载:juejin.cn/post/715575… 感谢分享