1、Date
1、使用new Date()创建日期的几种方式
- 使用日期字符串参数(ISO 8601)
- 使用一系列参数
- 时间戳参数
- 不带参数
2、ISO 8601
- `YYYY-MM-DDT:hh:mm:ss:sssZ`
- yyyy:4位数年份
- MM两位数月份
- DD两位数日期
- -日期分隔符
- T表示开始时间
- HH24位小时数
- mm分钟(0-59)
- ss秒
- sss毫秒
- :时间分隔符
- Z如果存在则为UTC,否则为本地时间
- 其中小时和比小时小的单位可以省略
不推荐是同字符串创建日期,因为创建日期的时候不指定时区会默认UTC时区,会和GMT等时区发生冲突,如果想要创建”本地时间“,则需要至少写入HH和mm,这样不同时区也能保持一致
我们可以传入参数new Date(2019,5,11,5,23,59)使用参数创建默认本地时间,不会导致时区混淆,最好不要使用字符串创建日期
3、格式化时间
建议自己格式化时间,也就是从对象中拿到年月日
4、比较日期
比较前后可以直接使用><=
比较相等需要获取时间戳来比较,如果只是比较是否是同一天,则定义方法,分别比较两个对象的年月日
5、修改时间
需要注意,我们不应该在当前对象修改时间,而是创建一个新的日期对象
const foo=new Date()
const far=new Date(foo)
//设置三天后的时间
far.setDate(foo.getDate()+3)
JS还为我们提供了自动日期矫正,如果在30号+3,则会自动矫正为下个月的2号(假设没有31日)
2、Dayjs
1、解析的参数格式
- 传入一个ISO8601格式
- 按照格式来解析字符串
- Unix时间戳
- Date对象
- 对象
- 数组
[2010, 1, 14, 15, 25, 50, 125]
{ year :2010, month :3, day :5, hour :15, minute :10, second :3, millisecond :123}
所有dayjs对象都是不可变的,我们可以使用clone()来获得一个对象,isValid()可以判断是否通过校验,包括传入的参数能否被正确解析为日期
设置和取值参考文档
2、操作
//增加
dayjs().add(7,"day")
//减去
dayjs().subtract(1,"year")
//返回复制的对象和他的开始时间
dayjs().startOf('year')
//返回复制对象和他结束时间
dayjs().endOf('month')