《ISO8601和dayjs库》

2,129 阅读2分钟

一. ISO8601

国际标准ISO 8601,是国际标准化组织的日期和时间的表示方法

我们关注日期和时间的组合表示法

合并表示时,要在时间前面加一大写字母T,如要表示东八区时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00

用法

1. Date对象=>ISO字符串

new Date()可以得到一个当前时间的date对象,是中国标准时间。

我们通常使用toISOString() 把这个Date对象转换成ISO表示方式的字符串。

2. ISO字符串=>Date对象

比如我们有一段ISO字符串,把这个字符串放入Date.parse()里,会得到一串数字,再把这串数字放到new Date() 里,就可以还原成Date对象。

JS操作时间的库-dayjs

安装

yarn add dayjs

使用

import dayjs from 'dayjs';

dayjs() 就相当于new Date() ,返回一个当前时间的对象。这个对象有很多API,操作这个时间。

也可以传进去一段ISO字符串,转换成dayjs对象

beautify(string: string){
            const day=dayjs(string)
            const now=dayjs()
            if(day.isSame(now,'day')){
                return '今天'
            }else if(day.isSame(now.subtract(1,'day'),'day')){
                return '昨天'
            }else if(day.isSame(now.subtract(2,'day'),'day')){
                return '前天'
            }else if(day.isSame(now,'year')) {
                return day.format('M月M日')
            }else {
                return day.format('YYYY年M月D日')
            }
}

这个参数字符串是'2020-5-30'这样的字符串,是通过把Date对象进行.ISOString()转换成ISO标准时间,然后以T分隔出来的日期字符串。

我们想根据不同的情况进行不同的展示。比如,显示今天,昨天,前天。

有时候我们想把一堆日期排序,就需要比较日期的大小。如果现在的每一个日期是ISO字符串的形式,字符串可以使用> <=来比较,但是如果想相减呢?

字符串是不支持相减的。只能把他们变成数字,取值,再相减

dayjs(string).valueOf()

传进dayjs里,变成对象,调用valueOf,就变成值了,这时就可以相减了。