moment(String, String);
moment(String, String, String);
moment(String, String, String[]);
moment(String, String, Boolean);
moment(String, String, String, Boolean);
如果你知道输入字符串的格式,则可以使用它来解析 moment。
moment("12-25-1995", "MM-DD-YYYY");
默认情况下,解析器会忽略非字母数字字符,因此以下两个将返回相同的内容。
moment("12-25-1995", "MM-DD-YYYY");
moment("12/25/1995", "MM-DD-YYYY");
解析日期和时间时,你可能会得到意想不到的结果。 下面的示例可能不会像你预期的那样解析:
moment('24/12/2019 09:15:00', "DD MM YYYY hh:mm:ss");
你可以使用严格模式,它将识别解析错误并将 Moment 对象设置为无效:
moment('24/12/2019 09:15:00', "DD MM YYYY hh:mm:ss", true);
解析标记类似于 moment#format
中使用的格式化标记。
令牌区分大小写。
输入 | 例子 | 描述 |
---|---|---|
YYYY | 2014 | 4 或 2 位数年份。 注意: strict 模式只能解析 4 位 |
YY | 14 | 2 位数年份 |
Y | -25 | 带有任意数字和符号的年份 |
Q | 1..4 | 季度。 将月份设置为季度的第一个月。 |
M MM | 1..12 | 月份 |
MMM MMMM | Jan..December | moment.locale() 设置的语言环境中的月份名称 |
D DD | 1..31 | 一个月中的第几天 |
Do | 1st..31st | 带序号的月份中的第几天 |
DDD DDDD | 1..365 | 一年中的某一天 |
X | 1410715640.579 | Unix 时间戳 |
x | 1410715640579 | Unix 毫秒时间戳 |
2.10.5 版本的 YYYY
在非 strict
模式下支持 2 位数年份,并将它们转换为接近 2000 的年份(与 YY
相同)。
在 2.11.1 中添加了 Y
。 它将匹配任何有符号或无符号的数字。 对于不是 4 位数字或纪元之前的年份很有用。 它可以用于任何一年。
对于这些,小写标记使用区域设置感知周开始日期,大写标记使用 ISO 周日期 开始日期。
令牌区分大小写。
输入 | 例子 | 描述 |
---|---|---|
gggg | 2014 | 区域设置 4 位数星期年份 |
gg | 14 | 区域设置 2 位数周年 |
w ww | 1..53 | 一年中的语言环境周 |
e | 0..6 | 星期几 |
ddd dddd | Mon...Sunday | moment.locale() 设置的语言环境中的日期名称 |
GGGG | 2014 | ISO 4 位数周年 |
GG | 14 | ISO 2 位数周年 |
W WW | 1..53 | 一年中的 ISO 周 |
E | 1..7 | ISO 星期几 |
使用 LT LTS L LL LLL LLLL
也可以使用区域设置感知日期和时间格式。 它们是在版本 2.2.1 中添加的,但 LTS
是在 2.8.4 中添加的。
令牌区分大小写。
输入 | 例子 | 描述 |
---|---|---|
L | 09/04/1986 | 日期(本地格式) |
LL | September 4 1986 | 月份、月日、年 |
LLL | September 4 1986 8:30 PM | 月份、月日、年、时间 |
LLLL | Thursday, September 4 1986 8:30 PM | Day of week, month name, day of month, year, time |
LT | 8:30 PM | 时间(不含秒) |
LTS | 8:30:00 PM | 时间(秒) |
令牌区分大小写。
输入 | 例子 | 描述 |
---|---|---|
H HH | 0..23 | 小时(24 小时制) |
h hh | 1..12 | 小时(与 a A 一起使用的 12 小时时间。) |
k kk | 1..24 | 小时(24 小时制,从 1 到 24) |
a A | am pm | 子午线前后(注意一个字符 a p 也被认为是有效的) |
m mm | 0..59 | 分钟 |
s ss | 0..59 | 秒 |
S SS SSS ... SSSSSSSSS | 0..999999999 | 小数秒 |
Z ZZ | +12:00 | 与 UTC 的偏移量为 +-HH:mm 、+-HHmm 或 Z |
从版本 2.10.5 开始: 小数秒标记长度为 4 到 9 可以解析任意数量的数字,但只会考虑前 3 个(毫秒)。 如果你的时间打印有很多小数位并且想要使用输入,请使用。
请注意,提供的 S
字符数仅在以严格模式解析时才相关。
在标准模式下,S
、SS
、SSS
、SSSS
都是等价的,并被解释为秒的小数部分。
例如,.12
始终为 120 毫秒,传递 SS
不会导致它被解释为 12 毫秒。
Z ZZ
已添加到版本 1.2.0 中。
S SS SSS
已添加到版本 1.6.0 中。
X
是在版本 2.0.0 中添加的。
SSSSS ... SSSSSSSSS
已添加到版本 2.10.5 中。
k kk
已添加到版本 2.13.0 中。
除非你指定时区偏移量,否则解析字符串将在当前时区中创建一个日期。
moment("2010-10-20 4:30", "YYYY-MM-DD HH:mm"); // parsed as 4:30 local time
moment("2010-10-20 4:30 +0000", "YYYY-MM-DD HH:mm Z"); // parsed as 4:30 UTC
令牌区分大小写。
输入 | 例子 | 描述 |
---|---|---|
y .. yyyy | 5 +5 -500 | 年 |
yo | 5th 1st | 序数年 |
N | AD | 缩写年号 |
NN | AD | 缩写年号 |
NNN | AD | 缩写年号 |
NNNN | Anno Domini | 全纪元名称 |
NNNNN | AD | 狭义时代名称 |
2.25.0 中添加了时代支持。 令牌/API 仍在不断变化。
如果解析输入产生的 moment 不存在,moment#isValid
将返回 false。
moment("2010 13", "YYYY MM").isValid(); // false (not a real month)
moment("2010 11 31", "YYYY MM DD").isValid(); // false (not a real day)
moment("2010 2 29", "YYYY MM DD").isValid(); // false (not a leap year)
moment("2010 notamonth 29", "YYYY MMM DD").isValid(); // false (not a real month name)
从版本 2.0.0 开始,区域设置密钥可以作为第三个参数传递给 moment()
和 moment.utc()
。
moment('2012 juillet', 'YYYY MMM', 'fr');
moment('2012 July', 'YYYY MMM', 'en');
moment('2012 July', 'YYYY MMM', ['qj', 'en']);
Moment 的解析器非常宽容,这可能会导致不希望的/意外的行为。
例如,可以观察到以下行为:
moment('2016 is a date', 'YYYY-MM-DD').isValid() //true, 2016 was matched
在 2.13.0 之前,解析器表现出以下行为。 这已得到纠正。
moment('I am spartacus', 'h:hh A').isValid(); //true - the 'am' matches the 'A' flag.
从版本 2.3.0 开始,你可以为最后一个参数指定一个布尔值,以使 Moment 使用严格解析。 严格解析要求格式和输入完全匹配,包括分隔符。
moment('It is 2012-05-25', 'YYYY-MM-DD').isValid(); // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid(); // false
moment('2012-05-25', 'YYYY-MM-DD', true).isValid(); // true
moment('2012.05.25', 'YYYY-MM-DD', true).isValid(); // false
你可以同时使用语言环境和严格性。
moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);
严格解析通常是最好的解析选项。 有关选择严格解析与宽容解析的更多信息,请参阅 解析指南。
默认情况下,假定 68 岁以上的两位数年份在 1900 年代,而 68 岁或以下的年份则假定在 2000 年代。 这可以通过替换 moment.parseTwoDigitYear
方法来更改。 此方法的唯一参数是一个包含用户输入的两年的字符串,应该以整数形式返回年份。
moment.parseTwoDigitYear = function(yearString) {
return parseInt(yearString) + 2000;
}
从版本 2.11.0 开始支持解析 hmm
、Hmm
、hmmss
和 Hmmss
:
moment("123", "hmm").format("HH:mm") === "01:23"
moment("1234", "hmm").format("HH:mm") === "12:34"