Moment工具库学习


Moment是JavaScript 日期处理类库,由于是获取设置时间,所以本文的注释可能会有偏差,学者可以自行试验。

一、解析

  1. moment()
    要获取当前的日期和时间
  2. 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表示时间)
);
  1. moment(Object)
    通过指定对象中的某些单位来创建 moment
console.log(moment({ year: 2010, month: 3, day: 5, hour: 15, minute: 10, second: 3, millisecond: 123 }));
//注意:这里的月份也是从0开始,此时对应的是4月
  1. moment(Number)
    可以通过传入一个整数值来创建 moment,该整数值表示自 Unix 纪元(1970 年 1 月 1 日 12AM UTC)以来的毫秒数。
console.log(moment(1318781876406));//这个参数为毫秒数
  1. moment(Date)
    以使用预先存在的原生 Javascript Date 对象来创建 Moment
console.log(moment(new Date(2011, 9, 16)));
  1. moment(Number[])
    可以使用数值的数组(映射传给 new Date() 的参数)来创建 moment
console.log(moment([2010, 1, 14, 15, 25, 50, 125]));
//注意月份是从0开始的,这里对应的是2月
  1. moment(JSONDate)
    默认情况下,Microsoft Web API 会以正确的 ISO-8601 格式返回 JSON 日期
console.log(moment("/Date(1198908717056-0700)/"));	//前面一串数字为时间戳,-后面的是时区
  1. moment(Moment)
    所有的 moment 都是可变的。 如果想要克隆 moment,则可以隐式或显式地操作。在 moment 上调用 moment() 将会克隆它。
var a=moment([2012]);
var b=moment(a);
console.log(a.valueOf()===b.valueOf())
//也可以使用clone()去克隆
  1. 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() 获取/设置星期…这些极为简单,不做过多介绍

  1. weekday() 根据语言环境获获取/设置星期,根据语言环境获取或设置星期几
moment.locale('zh-cn');	//把当前的语言环境设置为中文
console.log(
	moment().weekday(),	//0	
	moment().weekday(0),	//0	//英文下是周日,中文下是周一
);
  1. dayOfYear() 获取或设置年份的日期(今天是今年的第几天)
console.log(moment().dayOfYear());
console.log(moment().dayOfYear(1));
  1. week()/weeks() 获取或设置年份的星期(当前星期是今年的第几个星期)
console.log(moment().week());
console.log(moment([2021, 4, 20]).week());
  1. month()/months() 获取或设置月份,设置时范围为0-11,还支持月份名称
console.log(moment().month());	//3
console.log(moment().month('July'));
  1. quarter()/quarters() 获取或设置季度
console.log(moment().quarter());
console.log(moment().quarter(4));
  1. year()/years() 获取或设置年份
console.log(moment().year());
console.log(moment().year(2088));
  1. weekYear()根据语言环境获取或设置周年。因为第一周的第一天并不总是在一年的第一天,所以有时周年与月年会有所不同。
console.log(moment([2020, 0, 1]).weekYear());
console.log(moment([2020, 11, 31]).weekYear());
  1. weeksInYear() 根据语言环境获取当前 moment 年份的周数
console.log(moment().weeksInYear());
  1. get() 获取日期
console.log(moment().get('year'));
console.log(moment().get('M'));
console.log(moment().get('date'));
  1. set() 设置日期
console.log(
	moment().set('year', 2030),
	moment().set('month', 8),
	moment().set({
		'year': 2008,
		'month': 7,
		'date': 8
	}),
);
  1. 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

三、操作显示

  1. 操作: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 }));
//注意:如果原始日期中的日期大于最终月份的天数,则跳到最后一天
  1. subtract() 减少日期
console.log(moment().subtract(7, 'days'));
console.log(moment().subtract(1.5, 'months').valueOf() === moment().subtract(2, 'months').valueOf());
//true 如果传小数的话,会被四舍五入
  1. 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));
  1. endOf()
console.log(moment().endOf('year'));//置成今年的最后一天的最后一刻
console.log(moment().endOf('month'));//设置为当月的最后一天的最后一刻
  1. local() 在日期上设置个标记,以使用本地时间
var a = moment.utc([2011, 0, 1, 8]);
console.log(a.hours());	//8
a.local();
console.log(a.hours());	//16
  1. utcOffset() 获取本地时间与UTC时间的偏移量(差值)以分钟数为单位
console.log(moment().utcOffset());	//480
console.log(moment().utcOffset(10));
//把本地时间与UTC时间的偏移量设置成10,也就是本地时间比UTC时间多10个小时
  1. 显示: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'));
  1. fromNow() 相对于现在的时间
console.log(
	moment([2008]).fromNow(),	//12 年前,2008年相对于今天是12年前的时间
	moment([2008]).fromNow(true),	//12 年
);
  1. 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),
);
  1. toNow() 到现在的时间
console.log(
	moment([2008]).toNow(),	//12 年内
	moment([2008]).toNow(true),	//12 年
);
  1. 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 天
);
  1. 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
  1. 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
  1. daysInMonth() 获取某月的天数
console.log(moment().daysInMonth());	
console.log(moment('2020-02').daysInMonth());

四、查询

  1. 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
  1. isSame() 检查两个时间是否相同
console.log(moment('2010-10-20').isSame('2010-10-20'));
console.log(moment('2010-10-20').isSame('2010-12-20', 'year'));
  1. isAfter() 检查一个时间是否在另一个时间之后
console.log(moment('2010-10-20').isAfter('2010-09-19'));	//true
  1. 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
);
  1. 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
);
  1. 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
);
  1. isLeapYear() 检测是否为闰年
console.log(
	moment().isLeapYear(),	//true
	moment([2019]).isLeapYear(),	//false
);
  1. isMoment() 检测变量是否为moment对象
console.log(
	moment.isMoment(),	//false
	moment.isMoment(new Date()),	//false
	moment.isMoment(moment()),	//true
);
  1. isDate() 检测变量是否为原生的Date对象
console.log(
	moment.isDate(),	//false
	moment.isDate(new Date()),	//true
	moment.isDate(moment()),	//false
);

Moment是一个js的时间类库,方法很多,本人也是学习一些觉得能够用到的方法,如果读者想了解更多,请访问链接: Moment.js.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值