项目中都会遇到很多需要处理日期时间的地方,但是用原生方法来处理会很繁琐,所以就需要用到一个前端常用的日期处理库了,它就是Moment.js,本文会结合自身的日常使用来为大家详细的介绍一下这个库。
首先说明一点,本文不是针对moment的原理来作说明的,所以这里不会涉及原理类的探讨,本文是根据我自身在工作中的使用,希望能帮助大家更好的使用它的,如果有错漏不足之处,还请见谅并指正!
1. moment()
moment.js将时间封装成一个moment对象,这个对象有多种构造方式,支持传入字符串、数组和对象。
如果什么都不传,得到的就是当前系统时间。
moment() // 当前时间
2. 日期格式化
format()将moment设置为相应格式的日期时间
moment().format('YYYY-MM-DD')
3. 自定义日期操作
startOf()通过将原始的moment设置为时间单位的开头来对其进行操作。
moment().startOf('year') // 设置为今年一月1日上午 00:00:00
moment().startOf('month') // 设置为本月1日上午 00:00:00
moment().startOf('day') // 设置为今天上午 00:00:00
endOf()通过将原始的moment设置为时间单位的末尾来对其进行操作。
类比上面的startOf,比如:
moment().endOf('year') // 设置为今年的 12 月 31 日 23:59:59
4. 实际应用
task需求:
变更生效日期只能是当前日期之后(包含当前日期)且只能是1号
例如:10月1号就可以选择十月,而10月2号就只能选择十一月和十二月
解决方案:
// html
<a-form-model-item prop="time" label="变更生效日期:">
<a-month-picker valueFormat="YYYY-MM" placeholder="请选择变更生效日期" v-model="form.time" :disabled-date="disabledDate"></a-month-picker><span style="display: inline-block; margin-left: 15px">01</span>
</a-form-model-item>
很明显这是用ant design of vue写的结构,在这个日期选择框里有一个属性,是可以控制不可选择的日期的
那么,我们想要达到我们想要的效果,就需要在这个属性上下功夫了,如图可以看到,它是一个函数,参数是一个当前的moment日期,最终返回的是布尔值,也就是说返回true的日期则不可选择,返回false的日期就是可以选择,那么这个方法怎么写就一目了然了
// js
disabledDate(current) {
// &&前面加上current是为了避免current为空报错
return current && (current.startOf('month') < moment().startOf('day'))
}
这个传进来的current参数指的是当前时间,比如现在上午8:00,它也是8:00,但是却是每个月1号的8:00,会传入12次,所以我们对每次传入的当前时间进行处理后,也就是将它处理为每个月1号的开始时间,和今天的开始时间作比较,只要在今天之前则为true,就不可选择,所以1号自然是可以选择当月的,而2号就会将当月设为不可选择了。