欢迎各位兄弟 发布技术文章
这里的技术是共享的
使用给定的格式字符串返回从字符串解析的日期。
包装在两个单引号字符(')之间的格式字符串中的字符被转义。 一行中的两个单引号,无论是在引号序列的内部还是外部,都代表“真实”单引号。
格式字符串的格式基于Unicode技术标准#35:https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table,其中有一些补充(请参见表格下方的注释5)。
可接受的格式字符串模式:
单元 | 先 | 图案 | 结果示例 | 笔记 |
---|---|---|---|---|
时代 | 140 | G..GGG | 公元前 | |
GGGG | 安诺·多米尼(Anno Domini),在基督之前 | 2 | ||
GGGGG | A,B | |||
公历年 | 130 | ÿ | 44,1,1900,2017,9999 | 4 |
哟 | 第44、1、1900、9999999 | 4,5 | ||
YY | 44,01,00,17 | 4 | ||
YYY | 044、001、123、999 | 4 | ||
YYYY | 0044、0001、1900、2017 | 4 | ||
YYYYY | ... | 2,4 | ||
当地星期编号年 | 130 | ÿ | 44,1,1900,2017,9000 | 4 |
哟 | 第44、1、1900、9999999 | 4,5 | ||
YY | 44,01,00,17 | 4 | ||
YYY | 044、001、123、999 | 4 | ||
YYYY | 0044、0001、1900、2017 | 4 | ||
YYYYY | ... | 2,4 | ||
ISO周编号年份 | 130 | [R | -43、1、1900、2017、9999,-9999 | 4,5 |
RR | -43,01,00,17 | 4,5 | ||
存款准备金率 | -043、001、123、999,-999 | 4,5 | ||
RRRR | -0043、0001、2017、9999,-9999 | 4,5 | ||
RRRRR | ... | 2,4,5 | ||
延长一年 | 130 | ü | -43、1、1900、2017、9999,-999 | 4 |
UU | -43、01、99,-99 | 4 | ||
UUU | -043、001、123、999,-999 | 4 | ||
UUUU | -0043、0001、2017、9999,-9999 | 4 | ||
UUUUU | ... | 2,4 | ||
季度(格式) | 120 | Q | 1 2 3 4 | |
QO | 1、2、3、4 | 五 | ||
01、02、03、04 | ||||
QQQ | Q1,Q2,Q3,Q4 | |||
QQQQ | 第一季度,第二季度,... | 2 | ||
QQQQQ | 1 2 3 4 | 4 | ||
季度(独立) | 120 | q | 1 2 3 4 | |
QO | 1、2、3、4 | 五 | ||
01、02、03、04 | ||||
QQQ | Q1,Q2,Q3,Q4 | |||
QQQQ | 第一季度,第二季度,... | 2 | ||
QQQQQ | 1 2 3 4 | 3 | ||
月(格式) | 110 | 中号 | 1,2,...,12 | |
莫 | 1、2,...,12 | 五 | ||
MM | 01、02,...,12 | |||
MMM | 一月,二月,...,十二月 | |||
MMMM | 一月,二月,...,十二月 | 2 | ||
MMMMM | J,F,...,D | |||
月(独立) | 110 | 大号 | 1,2,...,12 | |
罗 | 1、2,...,12 | 五 | ||
二 | 01、02,...,12 | |||
LLL | 一月,二月,...,十二月 | |||
LLLL | 一月,二月,...,十二月 | 2 | ||
LLLLL | J,F,...,D | |||
一年中的当地一周 | 100 | w ^ | 1,2,...,53 | |
WO | 1、2,...,53 | 五 | ||
WW | 01,02,...,53 | |||
一年中的ISO周 | 100 | 一世 | 1,2,...,53 | 五 |
木卫一 | 1、2,...,53 | 五 | ||
II | 01,02,...,53 | 五 | ||
一个月中的某天 | 90 | d | 1,2,...,31 | |
做 | 1st,2nd,...,31st | 五 | ||
DD | 01,02,...,31 | |||
一年中的一天 | 90 | d | 1,2,...,365,366 | |
做 | 1、2,...,365、366 | 五 | ||
DD | 01、02,...,365、366 | |||
DDD | 001,002,...,365,366 | |||
DDDD | ... | 2 | ||
星期几(格式化) | 90 | E..EEE | 周一,周二,周三,...,苏 | |
EEEE | 星期一,星期二,...,星期日 | 2 | ||
EEEEE | M,T,W,T,F,S,S | |||
EEEEEE | Mo,Tu,We,Th,Fr,Su,Sa | |||
ISO星期几(格式) | 90 | 一世 | 1,2,3,...,7 | 五 |
IO | 第一,第二,...,第七 | 五 | ||
二 | 01,02,...,07 | 五 | ||
三 | 周一,周二,周三,...,苏 | 五 | ||
IIII | 星期一,星期二,...,星期日 | 2,5 | ||
IIIII | M,T,W,T,F,S,S | 五 | ||
IIIIII | Mo,Tu,We,Th,Fr,Su,Sa | 五 | ||
当地星期几(格式) | 90 | Ë | 2,3,4,...,1 | |
EO | 第二,第三,...,第一 | 五 | ||
EE | 02,03,...,01 | |||
EEE | 周一,周二,周三,...,苏 | |||
EEEE | 星期一,星期二,...,星期日 | 2 | ||
EEEEE | M,T,W,T,F,S,S | |||
EEEEEE | Mo,Tu,We,Th,Fr,Su,Sa | |||
本地星期几(独立) | 90 | C | 2,3,4,...,1 | |
合作 | 第二,第三,...,第一 | 五 | ||
CC | 02,03,...,01 | |||
CCC | 周一,周二,周三,...,苏 | |||
CCCC | 星期一,星期二,...,星期日 | 2 | ||
CCCCC | M,T,W,T,F,S,S | |||
CCCCCC | Mo,Tu,We,Th,Fr,Su,Sa | |||
上午下午 | 80 | a..aaa | 上午下午 | |
AAAA | 上午下午 | 2 | ||
AAAAA | , | |||
上午,下午,中午,午夜 | 80 | b..bbb | 上午,下午,中午,午夜 | |
BBBB | 上午,下午,中午,午夜 | 2 | ||
BBBBB | a,p,n,mi | |||
弹性时段 | 80 | B..BBB | 晚上,早晨,... | |
BBBB | 晚上,早晨,... | 2 | ||
BBBBB | 晚上,早晨,... | |||
时间[1-12] | 70 | H | 1,2,...,11,12 | |
浩 | 1、2,...,11、12 | 五 | ||
HH | 01、02,...,11、12 | |||
小时[0-23] | 70 | H | 0,1,2,...,23 | |
何 | 0th,1st,2nd,...,23rd | 五 | ||
HH | 00、01、02,...,23 | |||
小时[0-11] | 70 | ķ | 1,2,...,11,0 | |
柯 | 1、2,...,11、0 | 五 | ||
KK | 1,2,...,11,0 | |||
时间[1-24] | 70 | ķ | 24,1,2,...,23 | |
KO | 24th,1st,2nd,...,23rd | 五 | ||
KK | 24、01、02,...,23 | |||
分钟 | 60 | 米 | 0,1,...,59 | |
莫 | 0th,1st,...,59th | 五 | ||
毫米 | 00、01,...,59 | |||
第二 | 50 | 小号 | 0,1,...,59 | |
所以 | 0th,1st,...,59th | 五 | ||
SS | 00、01,...,59 | |||
秒的小数 | 40 | 小号 | 0,1,...,9 | |
SS | 00、01,...,99 | |||
SSS | 000、0001,...,999 | |||
SSSS | ... | 2 | ||
时区(ISO-8601 w / Z) | 20 | X | -08,+ 0530,Z | |
XX | -0800,+ 0530,Z | |||
XXX | -08:00,+ 05:30,Z | |||
XXXX | -0800,+ 0530,Z,+ 123456 | 2 | ||
XXXXX | -08:00,+ 05:30,Z,+ 12:34:56 | |||
时区(ISO-8601,不含Z) | 20 | X | -08,+ 0530,+ 00 | |
XX | -0800,+ 0530,+ 0000 | |||
XXX | -08:00,+ 05:30,+ 00:00 | 2 | ||
XXXX | -0800,+ 0530,+ 0000,+ 123456 | |||
XXXXX | -08:00,+ 05:30,+ 00:00,+ 12:34:56 | |||
秒时间戳 | 10 | Ť | 512969520 | |
TT | ... | 2 | ||
毫秒时间戳 | 10 | Ť | 512969520900 | |
TT | ... | 2 |
笔记:
在默认的美国语言环境 中,“格式化”单位(例如,格式化季度)与“独立”单位相同,但在某些语言中有所不同。在日期的上下文中 ,根据语言规则拒绝“格式化”单位 。“独立”单位始终是主格单数。 在功能上,它们将产生不同的结果:format
format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'
format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'
parse
将尝试可互换地匹配格式和独立单元。
相同字母的任何序列都是一个模式,除非由 单引号引起来(请参见下文)。 如果序列长于表中所列:
对于数字单位()将尝试匹配与序列一样宽的数字yyyyyyyy
parse
对于文本单位()将尝试匹配该单位的最大变体形式。这些变化在表的最后一栏中标记为“ 2”。MMMMMMMM
parse
QQQQQ
并且在某些地区可能不是严格的数字形式。这些令牌表示该季度的最短形式。qqqqq
和模式之间的主要区别是BC年:y
u
年 | y | u |
---|---|---|
AC 1 | 1 | 1 |
公元前1年 | 1 | 0 |
公元前2年 | 2 | -1 |
也将尝试通过接近来猜测两位数的世纪:yy
baseDate
parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00
parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00
而只是按原样分配年份:uu
parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00
parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00
对于本地和ISO周编号年份(和),存在相同的差异,除了本地周编号年份取决于和(比较setISOWeekYear和setWeekYear)。Y
R
options.weekStartsOn
options.firstWeekContainsDate
这些模式不在Unicode技术标准#35中:
i
:ISO星期几
I
:一年中的ISO周
R
:ISO周编号年份
o
:序数修饰符
值将按照其单位优先级的降序分配给日期。 优先级相同的单元按出现顺序相互覆盖。
如果没有解析更高优先级的值(例如,解析字符串'January 1st'而没有年份),则 这些值将取自第3个参数,该参数用作解析的上下文。baseDate
baseDate
必须传递该函数才能正常工作。 如果不确定要提供哪个,请创建一个新的Date实例:在这种情况下,将在当前日期的上下文中进行解析。如果是或者值转换为有效的,那么将被退回。baseDate
parse('02/11/2014', 'MM/dd/yyyy', new Date())
baseDate
Invalid Date
Date
Invalid Date
结果可能因地区而异。
如果与匹配但不提供令牌,将返回。formatString
dateString
baseDate
如果解析失败,将返回。无效日期是一个日期,其时间值为NaN。日期的时间值:http://es5.github.io/#x15.9.1.1Invalid Date
名称 | 类型 | 描述 |
---|---|---|
dateString | 串 | the string to parse |
formatString | 串 | the string of tokens |
baseDate | 日期| 字串| 数 | 定义解析的dateString中缺少的值 |
选项 (可选的) | 选项 | 带选项的对象。查看选项 |
类型 | 描述 |
---|---|
日期 | the parsed date |
类型 | 描述 |
---|---|
类型错误 | 3 arguments required |
引发RangeError |
|
引发RangeError |
|
引发RangeError |
|
引发RangeError |
|
来自 https://date-fns.org/v2.0.0-alpha.18/docs/parse
Return the date parsed from string using the given format string.
The characters in the format string wrapped between two single quotes characters (') are escaped.Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
Format of the format string is based on Unicode Technical Standard #35:https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table with a few additions (see note 5 below the table).
Accepted format string patterns:
Unit | Prior | Pattern | Result examples | Notes |
---|---|---|---|---|
Era | 140 | G..GGG | AD, BC | |
GGGG | Anno Domini, Before Christ | 2 | ||
GGGGG | A, B | |||
Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |
yo | 44th, 1st, 1900th, 9999999th | 4,5 | ||
yy | 44, 01, 00, 17 | 4 | ||
yyy | 044, 001, 123, 999 | 4 | ||
yyyy | 0044, 0001, 1900, 2017 | 4 | ||
yyyyy | ... | 2,4 | ||
Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |
Yo | 44th, 1st, 1900th, 9999999th | 4,5 | ||
YY | 44, 01, 00, 17 | 4 | ||
YYY | 044, 001, 123, 999 | 4 | ||
YYYY | 0044, 0001, 1900, 2017 | 4 | ||
YYYYY | ... | 2,4 | ||
ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |
RR | -43, 01, 00, 17 | 4,5 | ||
RRR | -043, 001, 123, 999, -999 | 4,5 | ||
RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 | ||
RRRRR | ... | 2,4,5 | ||
Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |
uu | -43, 01, 99, -99 | 4 | ||
uuu | -043, 001, 123, 999, -999 | 4 | ||
uuuu | -0043, 0001, 2017, 9999, -9999 | 4 | ||
uuuuu | ... | 2,4 | ||
Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |
Qo | 1st, 2nd, 3rd, 4th | 5 | ||
01, 02, 03, 04 | ||||
QQQ | Q1, Q2, Q3, Q4 | |||
QQQQ | 1st quarter, 2nd quarter, ... | 2 | ||
QQQQQ | 1, 2, 3, 4 | 4 | ||
Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |
qo | 1st, 2nd, 3rd, 4th | 5 | ||
01, 02, 03, 04 | ||||
qqq | Q1, Q2, Q3, Q4 | |||
qqqq | 1st quarter, 2nd quarter, ... | 2 | ||
qqqqq | 1, 2, 3, 4 | 3 | ||
Month (formatting) | 110 | M | 1, 2, ..., 12 | |
Mo | 1st, 2nd, ..., 12th | 5 | ||
MM | 01, 02, ..., 12 | |||
MMM | Jan, Feb, ..., Dec | |||
MMMM | January, February, ..., December | 2 | ||
MMMMM | J, F, ..., D | |||
Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |
Lo | 1st, 2nd, ..., 12th | 5 | ||
LL | 01, 02, ..., 12 | |||
LLL | Jan, Feb, ..., Dec | |||
LLLL | January, February, ..., December | 2 | ||
LLLLL | J, F, ..., D | |||
Local week of year | 100 | w | 1, 2, ..., 53 | |
wo | 1st, 2nd, ..., 53th | 5 | ||
ww | 01, 02, ..., 53 | |||
ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |
Io | 1st, 2nd, ..., 53th | 5 | ||
II | 01, 02, ..., 53 | 5 | ||
Day of month | 90 | d | 1, 2, ..., 31 | |
do | 1st, 2nd, ..., 31st | 5 | ||
dd | 01, 02, ..., 31 | |||
Day of year | 90 | D | 1, 2, ..., 365, 366 | |
Do | 1st, 2nd, ..., 365th, 366th | 5 | ||
DD | 01, 02, ..., 365, 366 | |||
DDD | 001, 002, ..., 365, 366 | |||
DDDD | ... | 2 | ||
Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Su | |
EEEE | Monday, Tuesday, ..., Sunday | 2 | ||
EEEEE | M, T, W, T, F, S, S | |||
EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |||
ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |
io | 1st, 2nd, ..., 7th | 5 | ||
ii | 01, 02, ..., 07 | 5 | ||
iii | Mon, Tue, Wed, ..., Su | 5 | ||
iiii | Monday, Tuesday, ..., Sunday | 2,5 | ||
iiiii | M, T, W, T, F, S, S | 5 | ||
iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 | ||
Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |
eo | 2nd, 3rd, ..., 1st | 5 | ||
ee | 02, 03, ..., 01 | |||
eee | Mon, Tue, Wed, ..., Su | |||
eeee | Monday, Tuesday, ..., Sunday | 2 | ||
eeeee | M, T, W, T, F, S, S | |||
eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |||
Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |
co | 2nd, 3rd, ..., 1st | 5 | ||
cc | 02, 03, ..., 01 | |||
ccc | Mon, Tue, Wed, ..., Su | |||
cccc | Monday, Tuesday, ..., Sunday | 2 | ||
ccccc | M, T, W, T, F, S, S | |||
cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |||
AM, PM | 80 | a..aaa | AM, PM | |
aaaa | a.m., p.m. | 2 | ||
aaaaa | a, p | |||
AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |
bbbb | a.m., p.m., noon, midnight | 2 | ||
bbbbb | a, p, n, mi | |||
Flexible day period | 80 | B..BBB | at night, in the morning, ... | |
BBBB | at night, in the morning, ... | 2 | ||
BBBBB | at night, in the morning, ... | |||
Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |
ho | 1st, 2nd, ..., 11th, 12th | 5 | ||
hh | 01, 02, ..., 11, 12 | |||
Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |
Ho | 0th, 1st, 2nd, ..., 23rd | 5 | ||
HH | 00, 01, 02, ..., 23 | |||
Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |
Ko | 1st, 2nd, ..., 11th, 0th | 5 | ||
KK | 1, 2, ..., 11, 0 | |||
Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |
ko | 24th, 1st, 2nd, ..., 23rd | 5 | ||
kk | 24, 01, 02, ..., 23 | |||
Minute | 60 | m | 0, 1, ..., 59 | |
mo | 0th, 1st, ..., 59th | 5 | ||
mm | 00, 01, ..., 59 | |||
Second | 50 | s | 0, 1, ..., 59 | |
so | 0th, 1st, ..., 59th | 5 | ||
ss | 00, 01, ..., 59 | |||
Fraction of second | 40 | S | 0, 1, ..., 9 | |
SS | 00, 01, ..., 99 | |||
SSS | 000, 0001, ..., 999 | |||
SSSS | ... | 2 | ||
Timezone (ISO-8601 w/ Z) | 20 | X | -08, +0530, Z | |
XX | -0800, +0530, Z | |||
XXX | -08:00, +05:30, Z | |||
XXXX | -0800, +0530, Z, +123456 | 2 | ||
XXXXX | -08:00, +05:30, Z, +12:34:56 | |||
Timezone (ISO-8601 w/o Z) | 20 | x | -08, +0530, +00 | |
xx | -0800, +0530, +0000 | |||
xxx | -08:00, +05:30, +00:00 | 2 | ||
xxxx | -0800, +0530, +0000, +123456 | |||
xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |||
Seconds timestamp | 10 | t | 512969520 | |
tt | ... | 2 | ||
Milliseconds timestamp | 10 | T | 512969520900 | |
TT | ... | 2 |
Notes:
"Formatting" units (e.g. formatting quarter) in the default en-US locale are the same as "stand-alone" units, but are different in some languages. "Formatting" units are declined according to the rules of the language in the context of a date. "Stand-alone" units are always nominative singular.In format
function, they will produce different result:
format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'
format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'
parse
will try to match both formatting and stand-alone units interchangably.
Any sequence of the identical letters is a pattern, unless it is escaped by the single quote characters (see below). If the sequence is longer than listed in table:
for numerical units (yyyyyyyy
) parse
will try to match a number as wide as the sequence
for text units (MMMMMMMM
) parse
will try to match the widest variation of the unit. These variations are marked with "2" in the last column of the table.
QQQQQ
and qqqqq
could be not strictly numerical in some locales. These tokens represent the shortest form of the quarter.
The main difference between y
and u
patterns are B.C. years:
Year | y | u |
---|---|---|
AC 1 | 1 | 1 |
BC 1 | 1 | 0 |
BC 2 | 2 | -1 |
Also yy
will try to guess the century of two digit year by proximity with baseDate
:
parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00
parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00
while uu
will just assign the year as is:
parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00
parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00
The same difference is true for local and ISO week-numbering years (Y
and R
), except local week-numbering years are dependent on options.weekStartsOn
and options.firstWeekContainsDate
(compare setISOWeekYear and setWeekYear).
These patterns are not in the Unicode Technical Standard #35:
i
: ISO day of week
I
: ISO week of year
R
: ISO week-numbering year
o
: ordinal number modifier
Values will be assigned to the date in the descending order of its unit's priority. Units of an equal priority overwrite each other in the order of appearance.
If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year), the values will be taken from 3rd argument baseDate
which works as a context of parsing.
baseDate
must be passed for correct work of the function. If you're not sure which baseDate
to supply, create a new instance of Date: parse('02/11/2014', 'MM/dd/yyyy', new Date())
In this case parsing will be done in the context of the current date. If baseDate
is Invalid Date
or a value not convertible to valid Date
, then Invalid Date
will be returned.
The result may vary by locale.
If formatString
matches with dateString
but does not provides tokens, baseDate
will be returned.
If parsing failed, Invalid Date
will be returned. Invalid Date is a Date, whose time value is NaN.Time value of Date: http://es5.github.io/#x15.9.1.1
Name | Type | Description | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
dateString | String | the string to parse | |||||||||||||||
formatString | String | the string of tokens | |||||||||||||||
baseDate | Date | String | Number | defines values missing from the parsed dateString | |||||||||||||||
options (optional) | Options | the object with options. See Options Properties:
|
Type | Description |
---|---|
Date | the parsed date |
Type | Description |
---|---|
TypeError | 3 arguments required |
RangeError |
|
RangeError |
|
RangeError |
|
RangeError |
|