其实moment.js 官方主页已经很详细和清晰了,这里做一下笔记加强记忆。
1、初始化和格式化
var now = new moment(); // 获取当前时间,注意必须要用new。
var date1 = moment(20200101, "YYYYMMDD");
var date2 = moment("2020-01-01", "YYYY-MM-DD");
var date3 = moment("20200101");
var date4 = moment(2020, 1, 1);
初始化和格式化语法是一致的:
date1.format("YYYY年M月D日")
date2.format("hhmmss")
常用的格式控制符有: YYYY、YY (两位数年份)、MM (两位数月份,不足添加 0 )、M (月份)、MMM (英文月份简写)、DD (两位数日期)、D、hh ( 12 小时制)、HH ( 24 小时制)、mm、ss、SSS (毫秒)、X (秒时间撮)、x (毫秒时间撮)。
2、获取和设置年月日等值
moment.js 获取和设置使用同一个函数,不带参数表示获取,带参数表示设置。
var year = date.year();
var month = date.month(); // 注意从0开始!
var day = date.date(); // 注意是date(),不是day(),从0开始!
var weekday = date.day(); // 注意和date()区别!0到6,周日为0。
var weekday = date.isoWeekday(); // 1到7,周日为7。
var hour = date.hours();
var minute = date.minutes();
var second = date.seconds();
3、调整日期和时间
主要是 add 和 subtract 两个函数。
var newDate = date.add(1, 'years');
var newDate = date.subtract(1, 'months');
第二个函数的周期支持: years, months, days, hours, minutes, seconds。
4、时间差
主要是 diff 函数,第二个参数参考上面的周期。
var ms = date1.diff(date2); // 默认返回毫秒
var days = date1.diff(date2, "days"); // 可以指定周期
还有一个特殊的 fromNow 函数,用可读文字显示离当前时间的差异:
var diff = moment.add(1, "days").fromNow(); // in a day
var diff = moment.subtract(2, "months").fromNow(); // 2 months ago
5、获取一个周期的开始结束日期(包括时间)
比如获取一年的第一天和一个月的最后一天:
date.startOf('year');
date.endOf('month');
参数支持: year, month, week(周日为一周开始), isoWeek (周一为一周开始), day。
一个例子,判断是否为当年的最后一天:
var date = moment("20200101", "YYYYMMDD");
date == date.endOf("year").startOf("day");
6、比较
注意不能直接用==, >, < 等比较符号。为什么?还不知道。
//之前
moment('2010-10-20').isBefore('2010-10-21'); // true
//相同
moment('2010-10-20').isSame('2010-10-20'); // true
//之后
moment('2010-10-20').isAfter('2010-10-19'); // true
moment('2010-10-20').isSameOrBefore('2010-10-20'); // true
moment('2010-10-20').isSameOrAfter('2010-10-20'); // true
//之间
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true
上面所有函数还支持指定比较力度,比如 year, month, day。指定 year 表示只比较年份,指定 day 表示比较年月日(不比较具体的时间了):
moment1.isSame(moment2, "year");
Q. E. D.