Moment是JavaScript 日期处理类库,由于是获取设置时间,所以本文的注释可能会有偏差,学者可以自行试验。
一、解析
- moment()
要获取当前的日期和时间 - moment(String)
输入与已知的 ISO 8601 格式匹配的字符串返回固定时间,详情查看Moment解析文档
console.log(
moment('2013-039'), //返回2013年的第39天,2013年2月8号
moment('2013050'), //返回2013年的第50天,2013年2月19号
moment('2013W065'), //返回2013年的第6个星期的第5天,2013年2月8号(W表示星期)
moment('2013-02-08T09'),//返回2013年2月8号9点(T表示时间)
);
- moment(Object)
通过指定对象中的某些单位来创建 moment
console.log(moment({ year: 2010, month: 3, day: 5, hour: 15, minute: 10, second: 3, millisecond: 123 }));
//注意:这里的月份也是从0开始,此时对应的是4月
- moment(Number)
可以通过传入一个整数值来创建 moment,该整数值表示自 Unix 纪元(1970 年 1 月 1 日 12AM UTC)以来的毫秒数。
console.log(moment(1318781876406));//这个参数为毫秒数
- moment(Date)
以使用预先存在的原生 Javascript Date 对象来创建 Moment
console.log(moment(new Date(2011, 9, 16)));
- moment(Number[])
可以使用数值的数组(映射传给 new Date() 的参数)来创建 moment
console.log(moment([2010, 1, 14, 15, 25, 50, 125]));
//注意月份是从0开始的,这里对应的是2月
- moment(JSONDate)
默认情况下,Microsoft Web API 会以正确的 ISO-8601 格式返回 JSON 日期
console.log(moment("/Date(1198908717056-0700)/")); //前面一串数字为时间戳,-后面的是时区
- moment(Moment)
所有的 moment 都是可变的。 如果想要克隆 moment,则可以隐式或显式地操作。在 moment 上调用 moment() 将会克隆它。
var a=moment([2012]);
var b=moment(a);
console.log(a.valueOf()===b.valueOf())
//也可以使用clone()去克隆
- utc()
console.log(moment().format());
//GMT,默认为本地当前时间,东八区的时间(+08:00)
console.log(moment.utc().format());
//UTC的时间(世界标准时间,位于0时区,时区用Z表示,它与北京时间相差8个小时)
二、取值赋值
millisecond()/milliseconds() 获取或设置毫秒
second()/seconds() 获取/设置秒
minute()/minutes() 获取/设置分
hour()/hours() 获取/设置小时
date()/dates() 获取/设置日期
day()/days() 获取/设置星期…这些极为简单,不做过多介绍
- weekday() 根据语言环境获获取/设置星期,根据语言环境获取或设置星期几
moment.locale('zh-cn'); //把当前的语言环境设置为中文
console.log(
moment().weekday(), //0
moment().weekday(0), //0 //英文下是周日,中文下是周一
);
- dayOfYear() 获取或设置年份的日期(今天是今年的第几天)
console.log(moment().dayOfYear());
console.log(moment().dayOfYear(1));
- week()/weeks() 获取或设置年份的星期(当前星期是今年的第几个星期)
console.log(moment().week());
console.log(moment([2021, 4, 20]).week());
- month()/months() 获取或设置月份,设置时范围为0-11,还支持月份名称
console.log(moment().month()); //3
console.log(moment().month('July'));
- quarter()/quarters() 获取或设置季度
console.log(moment().quarter());
console.log(moment().quarter(4));
- year()/years() 获取或设置年份
console.log(moment().year());
console.log(moment().year(2088));
- weekYear()根据语言环境获取或设置周年。因为第一周的第一天并不总是在一年的第一天,所以有时周年与月年会有所不同。
console.log(moment([2020, 0, 1]).weekYear());
console.log(moment([2020, 11, 31]).weekYear());
- weeksInYear() 根据语言环境获取当前 moment 年份的周数
console.log(moment().weeksInYear());
- get() 获取日期
console.log(moment().get('year'));
console.log(moment().get('M'));
console.log(moment().get('date'));
- set() 设置日期
console.log(
moment().set('year', 2030),
moment().set('month', 8),
moment().set({
'year': 2008,
'month': 7,
'date': 8
}),
);
- max() 对比多个日期,返回最大的那个日期//min() 对比多个日期,返回最小的那个日期
var a = moment('2019-10-15');
var b = moment({ year: 2010, month: 3, date: 5 });
var c = moment([2020, 10, 20]);
console.log(moment.max(a, b, c)); //c
console.log(moment.min(a, b, c)); //b
三、操作显示
- 操作:add() 增加日期
console.log(moment().add(7, 'days'));//以今天的日期往后加7天
console.log(moment().add(5, 'M'));//以今天的日期往后加5个月。这里第二个参数使用的是快捷键
console.log(moment().add(365, 'days').add(1, 'months'));
console.log(moment().add({ days: 365, months: 1 }));
//注意:如果原始日期中的日期大于最终月份的天数,则跳到最后一天
- subtract() 减少日期
console.log(moment().subtract(7, 'days'));
console.log(moment().subtract(1.5, 'months').valueOf() === moment().subtract(2, 'months').valueOf());
//true 如果传小数的话,会被四舍五入
- startOf() 把日期设置成参数的开始值
console.log(moment().startOf('year'));//设置成今年第一天
console.log(moment().startOf('month'));//设置成当月第一天
console.log(moment().startOf('hour'));//设置成当前小时的最开始那一秒
console.log(moment().minutes(0).seconds(0).milliseconds(0));
- endOf()
console.log(moment().endOf('year'));//置成今年的最后一天的最后一刻
console.log(moment().endOf('month'));//设置为当月的最后一天的最后一刻
- local() 在日期上设置个标记,以使用本地时间
var a = moment.utc([2011, 0, 1, 8]);
console.log(a.hours()); //8
a.local();
console.log(a.hours()); //16
- utcOffset() 获取本地时间与UTC时间的偏移量(差值)以分钟数为单位
console.log(moment().utcOffset()); //480
console.log(moment().utcOffset(10));
//把本地时间与UTC时间的偏移量设置成10,也就是本地时间比UTC时间多10个小时
- 显示:format() 格式化时间,它的参数非常丰富
console.log(moment().format()); //2020-04-21T11:38:30+08:00
console.log(moment().format('DDDo, W, MMMM Do YYYY, h:mm:ss a - ZZ'));
- fromNow() 相对于现在的时间
console.log(
moment([2008]).fromNow(), //12 年前,2008年相对于今天是12年前的时间
moment([2008]).fromNow(true), //12 年
);
- from() 一个时间相对于另一个时间的时间
var a = moment([2007, 0, 15]);
var b = moment([2007, 0, 29]);
console.log(
a.from(b), //a相对于b是14天前的时间
a.from(b, true),
);
- toNow() 到现在的时间
console.log(
moment([2008]).toNow(), //12 年内
moment([2008]).toNow(true), //12 年
);
- to() 一个时间到另一个时间的间隔
var a = moment([2007, 0, 15]);
var b = moment([2007, 0, 29]);
console.log(
a.to(b), //14 天内 a到b的时间在14天内
a.to(b, true), //14 天
);
- calendar() 返回一个相对于参数(默认为当前时间)的日历时间。最终的结果它会根据两个时间的接近程度来决定。一共定义了6个档(读一下文档)最大的范围限制在一个星期,超过一个星期就会显示为“其它”
console.log(moment().calendar());
console.log(moment().calendar(moment([2020, 3, 15])));
//下星期二11:54 当前的日期为参数的日期的下星期2
console.log(moment().calendar(moment([2020, 3, 20]))); //明天11:56
console.log(moment().calendar(moment([2020, 4, 20]))); //2020/04/21
- diff() 返回两个时间的差值
var a=moment([2007, 0, 29]);
var b=moment([2007, 0, 28]);
console.log(a.diff(b)); //86400000 默认取两个时间差的毫秒数
console.log(a.diff(b, 'days')); //1
- daysInMonth() 获取某月的天数
console.log(moment().daysInMonth());
console.log(moment('2020-02').daysInMonth());
四、查询
- isBefore() 检查一个时间是否在另一个时间之前,默认是都转成毫秒数进行计算
console.log(moment('2010-10-20').isBefore()); //true 没给参数默认为现在的时间
console.log(moment('2010-10-20').isBefore('2010-10-19'));
//false 第一个日期是否在第二个日期之前
console.log(moment('2009-10-20').isBefore('2010-10-19', 'year'));
//false 二个参数为对比的单位,可以给的有year month week isoWeek day hour minute second
console.log(moment('2010-10-20').isBefore('2008-12-31', 'month')); //false
- isSame() 检查两个时间是否相同
console.log(moment('2010-10-20').isSame('2010-10-20'));
console.log(moment('2010-10-20').isSame('2010-12-20', 'year'));
- isAfter() 检查一个时间是否在另一个时间之后
console.log(moment('2010-10-20').isAfter('2010-09-19')); //true
- isSameOrBefore() 检查一个时间是否在另一个时间之前或者与之相同(<=)
console.log(
moment('2010-10-20').isSameOrBefore('2010-10-21'), //true
moment('2010-10-20').isSameOrBefore('2010-10-20'), //true
moment('2010-11-20').isSameOrBefore('2010-10-20'), //false
);
- isSameOrAfter() 检查一个时间是否在另一个时间之后或者与之相同(>=)
console.log(
moment('2010-11-20').isSameOrAfter('2010-10-21'), //true
moment('2010-10-20').isSameOrAfter('2010-10-20'), //true
moment('2010-10-19').isSameOrAfter('2010-10-20'), //false
);
- isBetween() 检查一个时间是否在其他两个时间之间
console.log(
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'), //true
moment('2010-10-20').isBetween('2010-10-19', undefined), //true undefined等于moment(),就是当前的时间
moment('2010-10-20').isBetween('2009-10-19', '2012-01-01', 'year'), //true
//第四个参数为包容性,第三个参数为null,表示对比单位为默认毫秒数
moment('2016-10-30').isBetween('2016-10-30', '2016-12-30', null, '()'), //false
);
- isLeapYear() 检测是否为闰年
console.log(
moment().isLeapYear(), //true
moment([2019]).isLeapYear(), //false
);
- isMoment() 检测变量是否为moment对象
console.log(
moment.isMoment(), //false
moment.isMoment(new Date()), //false
moment.isMoment(moment()), //true
);
- isDate() 检测变量是否为原生的Date对象
console.log(
moment.isDate(), //false
moment.isDate(new Date()), //true
moment.isDate(moment()), //false
);
Moment是一个js的时间类库,方法很多,本人也是学习一些觉得能够用到的方法,如果读者想了解更多,请访问链接: Moment.js.