最近在开发中遇到下面一些需求场景
场景一:以当前时间为基准获取前后n年作为时间范围作为接口入参
场景二:以指定时间为基准获取前后n年作为时间范围作为接口入参
场景三:入参要求的时间格式与当前时间格式不一致
场景四:判断当前时间是哪一季度
以上调用接口场景的入参都需要对原始日期变量进行一些操作变换才能满足需求,意味着我们要写一些额外的代码。但通常需求很急时候,我们既需要高效的完成编码工作,同时又需要保证代码的质量。每当这时如果自己去写这些繁琐的转换逻辑既会浪费自己的宝贵时间也不利于代码为其他同事所用。这时使用成熟的解决方案就显得尤其重要。moment
就是一个成熟的js日期处理库。使用它可以为我们带来如下好处:
书写更少的代码,让业务逻辑更清晰
代码更健壮
优秀的第三方库,别人接手我们的代码更容易
下面我们就看看如何通过moment
库快速完成我们的需求
这里直接跳过
moment
在不同环境下的安装,具体可到官网查看
一、拿到当前时间和指定时间
调用moment()
方法即可解析并获得指定的日期封装对象。这一封装对象也是后面一系列对时间进行操作的基础,该方法支持多种入参方式,日常使用拿到当前时间无需传参,获取指定时间传递符合ISO8601标准的字符串格式即可。
拿到当前时间:moment()
拿到指定时间:moment(String)
如:moment('2020-01-01')
在使用字符串格式创建日期对象时我们尽量与ISO 8601规范格式匹配,如果不匹配那么为了保证在不同浏览器下解析的兼容性,需要传入格式参数。
二、对拿到的时间进行操作
moment
提供了add
和subtract
方法分别用来对当前的时间进行加和减操作
列子:当前时间加减2年
moment().add(2, 'years')
moment().subtract(2, 'years')
指定时间加减2年
moment('2021-03-19').add(2, 'years')
moment('2021-03-19').subtract(2, 'years')
三、格式化输出
前面我们已经拿到了想要的时间,但有时格式并不符合需求,moment
提供了format
方法对输出进行格式化
这里以上一步的指定时间为例
moment('2021-03-19').add(2, 'years').format(token)
这里的token是指定的解析格式模板字符串。
给format方法传递一个解析格式如'YYYY-MM-DD'
会输出2021-03-09,输入'YYYY/MM/DD'
就会输出'2021/03/09'
要转义格式字符串中的字符,可以将字符包在方括号中
moment('2021-03-19').add(2, 'years').format('[今天] YYYY-MM-DD')
输出 今天 2021-03-19
四、判断当前时间是哪一季度
moment().quarter()
以上是对四种场景下moment的简单使用,moment
使用起来非常的简单方便,官方文档对解析、取值/赋值、操作、显示、查询以及国际化几个模块都有详细的讲解,在日常开发中还是要多多的使用起来!