定义
国际标准ISO 8601,是国际标准化组织的日期和时间的表示方法,目前是2004年12月1日发行的第三版“ISO8601:2004”以替代1998年与2000年的第二版
任何时间都可以写成ISO8601形式
日期表示法
年由4位数字组成YYYY,或者带正负号的四或五位数字表示±YYYYY。以公历公元1年为0001年,以公元前1年为0000年,公元前2年为-0001年,其他以此类推。应用其他纪年法要换算成公历,但如果发送和接受信息的双方有共同一致同意的其他纪年法,可以自行应用。
月、日用两位数字表示:MM、DD。
只使用数字为基本格式。使用短横线"-"间隔开年、月、日为扩展格式。
日历日期表示法
年为4位数,月为2位数,月中的日为2位数,日期(2020年5月12日)可表示为2020-05-12,或20200512。
顺序日期表示法
完全表示:可以将一年内的天的序数用3位数字表示,平年365天,闰年366天。如2004年5月3日可以表示为2004-124或2004124
星期日历表示法
可以用2位数表示年内第几个日历星期,再加上一位数表示日历星期内第几天,但日历星期前要加上一个大写字母W,如2004年5月3日可写成2004-W19-1或2004W191。但2005-W011是从2005年1月3日开始的,前几天属于上年的第53个日历星期。每个日历星期从星期一开始,星期日为第7天。
第一个日历星期有以下四种等效说法: 1,本年度第一个星期四所在的星期; 2,1月4日所在的星期; 3,本年度第一个至少有4天在同一星期内的星期; 4,星期一在去年12月29日至今年1月4日以内的星期;
日历星期表示法
可以用2位数表示本年内第几个日历星期,但日历星期前要加上一个大写字母W。
2004年第19个星期可写成:2004-W19或2004W19。
日历月表示法
2015年7月可写成:201507或2015-07。
日历年表示法
2015年可写成:2015。
日期时间表示法
只使用数字为基本格式。使用冒号":"间隔开小时、分、秒的为扩展格式。小时、分和秒都用2位数表示。
如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z。Z是相对协调世界时时间0偏移的代号。如下午2点30分5秒表示为14:30:05Z或143005Z;只表示小时和分,为1430Z或14:30Z;只表示小时,则为14Z或14Z。
秒可以带小数
日期和时间的组合表示法
合并表示时,要在时间前面加一大写字母T,如要表示东八区时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。
JS的时间库
Date对象是 JavaScript 原生的时间库。它以国际标准时间(UTC)1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒)。
Data函数
Date对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。无论有没有参数,直接调用Date总是返回当前时间。
Data构造函数
对它使用new命令,会返回一个Date对象的实例。如果不加参数,实例代表的就是当前时间。返回的是一个字符串。
Date对象可以接受多种格式的参数,返回一个该参数对应的时间实例。
两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。
Date 实例是一个对象
但是Date实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。
"Tue Dec 01 2015 09:34:43 GMT+0800 (CST)"Data静态函数方法
Date.now方法返回当前时间距离时间零点
Date.parse方法用来解析日期字符串,返回该时间距离时间零点的毫秒数。如果解析失败,返回NaN。
Date.UTC方法接受年、月、日等变量作为参数,返回该时间距离时间零点
Data实例方法
to类:从Date对象返回一个字符串,表示指定的时间。get类:获取Date对象的日期和时间。set类:设置Date对象的日期和时间。
挑几个重要的
- toString方法返回一个完整的日期字符串。"Tue Jan 01 2013 00:00:00 GMT+0800 (CST)"
- toUTCString方法返回对应的 UTC 时间。"Mon, 31 Dec 2012 16:00:00 GMT"
- toISOString方法返回对应时间的 ISO8601 写法。"2012-12-31T16:00:00.000Z",toISOString方法返回的总是 UTC 时区的时间。
- toDateString方法返回日期字符串(不含小时、分和秒)
- toTimeString方法返回时间字符串(不含年月日)。
- set类改变时间,用来与当前时间做比较
Dayjs
原生的API其实是一坨屎。我们使用一些轻量级库就行。
Day.js 并没有对原生 Date.prototype 做任何修改, 而是给 Date 对象做了一层封装。
- dayjs() 将返回一个包含当前日期和时间的 Day.js 对象。
- dayjs("12-25-1995", "MM-DD-YYYY"),不加格式只能解析ISO格式
- dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'