ISO 8601

1,176 阅读6分钟

定义

国际标准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-1242004124

星期日历表示法

可以用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-W192004W19

日历月表示法

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:0020040503T173008+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'