moment常用方法总结
add()
moment().add(Number, String);
moment().add(Duration);
moment().add(Object);
通过增加时间来改变原始的 moment。
这是一个相当稳健的功能,可以为现有的 moment 增加时间。 若要增加时间,则传入要增加的时间的键、以及要增加的数量。
moment().add(7, 'days');
如果对希望简短,也有一些快捷的键。
moment().add(7, 'd');
键 | 快捷键 |
---|---|
years | y |
quarters | Q |
months | M |
weeks | w |
days | d |
hours | h |
minutes | m |
seconds | s |
milliseconds | ms |
如果要同时增加多个不同的键,则可以将它们作为对象字面量传入。
moment().add(7, 'days').add(1, 'months'); // 链式
moment().add({days:7,months:1}); // 对象字面量
subtract()
moment().subtract(Number, String);
moment().subtract(Duration);
moment().subtract(Object);
通过减去时间来改变原始的 moment。
这与 moment#add
完全相同,只是不增加时间,而是减去时间。
moment().subtract(7, 'days');
startOf()
moment().startOf(String);
通过将原始的 moment 设置为时间单位的开头来对其进行更改。
moment().startOf('year'); // 设置为今年一月1日上午 12:00
moment().startOf('month'); // 设置为本月1日上午 12:00
moment().startOf('quarter'); // 设置为当前季度的开始,即每月的第一天上午 12:00
moment().startOf('week'); // 设置为本周的第一天上午 12:00
moment().startOf('isoWeek'); // 根据 ISO 8601 设置为本周的第一天上午 12:00
moment().startOf('day'); // 设置为今天上午 12:00
moment().startOf('date'); // 设置为今天上午 12:00
moment().startOf('hour'); // 设置为当前时间,但是 0 分钟、0 秒钟、0 毫秒
moment().startOf('minute'); // 设置为当前时间,但是 0 秒钟、0 毫秒
moment().startOf('second'); // 与 moment().milliseconds(0); 相同
这些快捷方式与以下的基本相同。
moment().startOf('year');
moment().month(0).date(1).hours(0).minutes(0).seconds(0).milliseconds(0);
moment().startOf('hour');
moment().minutes(0).seconds(0).milliseconds(0)
endOf()
moment().endOf(String);
通过将原始的 moment 设置为时间单位的末尾来对其进行更改。
这与 moment#startOf
相同,只是将其设置为时间单位的末尾,而不是设置为时间单位的开头。
moment().endOf("year"); // 将 moment 设置为今年的 12 月 31 日 23:59:59.999
format()
moment().format();
moment().format(String);
这是最稳健的显示选项。 它接受一串令牌并将其替换为其相应的值。
moment().format(); // "2014-09-08T08:02:17-05:00" (ISO 8601,无小数秒钟)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
moment().format("ddd, hA"); // "Sun, 3PM"
moment('gibberish').format('YYYY MM DD'); // "Invalid date"
令牌 | 输出 | |
---|---|---|
月份 | M | 1 2 ... 11 12 |
Mo | 1st 2nd ... 11th 12th | |
MM | 01 02 ... 11 12 | |
MMM | Jan Feb ... Nov Dec | |
MMMM | January February ... November December | |
季度 | Q | 1 2 3 4 |
Qo | 1st 2nd 3rd 4th | |
月份的日期 | D | 1 2 ... 30 31 |
Do | 1st 2nd ... 30th 31st | |
DD | 01 02 ... 30 31 | |
年份的日期 | DDD | 1 2 ... 364 365 |
DDDo | 1st 2nd ... 364th 365th | |
DDDD | 001 002 ... 364 365 | |
星期几 | d | 0 1 ... 5 6 |
do | 0th 1st ... 5th 6th | |
dd | Su Mo ... Fr Sa | |
ddd | Sun Mon ... Fri Sat | |
dddd | Sunday Monday ... Friday Saturday | |
星期几(语言环境) | e | 0 1 ... 5 6 |
星期几(ISO) | E | 1 2 ... 6 7 |
年份的星期 | w | 1 2 ... 52 53 |
wo | 1st 2nd ... 52nd 53rd | |
ww | 01 02 ... 52 53 | |
年份的星期(ISO) | W | 1 2 ... 52 53 |
Wo | 1st 2nd ... 52nd 53rd | |
WW | 01 02 ... 52 53 | |
年份 | YY | 70 71 ... 29 30 |
YYYY | 1970 1971 ... 2029 2030 | |
Y | 1970 1971 ... 9999 +10000 +10001 注意:对于 9999 年以后的日期,这符合 ISO 8601 标准。 | |
周年 | gg | 70 71 ... 29 30 |
gggg | 1970 1971 ... 2029 2030 | |
周年(ISO) | GG | 70 71 ... 29 30 |
GGGG | 1970 1971 ... 2029 2030 | |
子午线 | A | AM PM |
a | am pm | |
小时 | H | 0 1 ... 22 23 |
HH | 00 01 ... 22 23 | |
h | 1 2 ... 11 12 | |
hh | 01 02 ... 11 12 | |
k | 1 2 ... 23 24 | |
kk | 01 02 ... 23 24 | |
分钟 | m | 0 1 ... 58 59 |
mm | 00 01 ... 58 59 | |
秒钟 | s | 0 1 ... 58 59 |
ss | 00 01 ... 58 59 | |
小数秒钟 | S | 0 1 ... 8 9 |
SS | 00 01 ... 98 99 | |
SSS | 000 001 ... 998 999 | |
SSSS ... SSSSSSSSS | 000[0..] 001[0..] ... 998[0..] 999[0..] | |
时区 | z or zz | EST CST ... MST PST 注意:从 1.6.0 版本开始,z/zz 格式的令牌已从普通的 moment 对象中弃用。 在此处了解更多信息。 但是,如果将特定时区与 moment-timezone 插件一起使用,它们会起作用。 |
Z | -07:00 -06:00 ... +06:00 +07:00 | |
ZZ | -0700 -0600 ... +0600 +0700 | |
Unix 时间戳 | X | 1360013296 |
Unix 毫秒时间戳 | x | 1360013296123 |
本地化格式
由于首选的格式会根据语言环境而有所不同,因此有一些令牌可用于根据语言环境格式 moment。
同一格式有大小写变体。 小写版本旨在作为大写版本的简化版本。
时间 | LT | 8:30 PM |
---|---|---|
带秒钟的时间 | LTS | 8:30:25 PM |
月份数字,月份日期,年份 | L | 09/04/1986 |
l | 9/4/1986 | |
月份名称,月份日期,年份 | LL | September 4, 1986 |
ll | Sep 4, 1986 | |
月份名称,月份日期,年份,时间 | LLL | September 4, 1986 8:30 PM |
lll | Sep 4, 1986 8:30 PM | |
月份名称,月份日期,星期几,年份,时间 | LLLL | Thursday, September 4, 1986 8:30 PM |
llll | Thu, Sep 4, 1986 8:30 PM |
l ll lll llll
在 2.0.0 中可用。 LTS
新增于 2.8.4。
转义字符
要转义格式字符串中的字符,可以将字符包装在方括号中。
moment().format('[今天] dddd'); // '今天 Sunday'
fromNow()
moment().fromNow();
moment().fromNow(Boolean);
显示时间的常用方法是通过 moment#fromNow
处理。 有时称为时间间隔或相对时间。
moment([2007, 0, 29]).fromNow(); // 4 年前
If you pass true
, you can get the value without the suffix. 如果传入 true
,则可以获得不带后缀的值。
moment([2007, 0, 29]).fromNow(); // 4 年前
moment([2007, 0, 29]).fromNow(true); // 4 年
from()
moment().from(Moment|String|Number|Date|Array);
moment().from(Moment|String|Number|Date|Array, Boolean);
可能想要显示 moment 与现在以外的时间的相对时间。 在这种情况下,可以使用 moment#from
。
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b) // "1 天前"
第一个参数是可以传给 moment()
的任何值或实际的 Moment
。
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b); // "1 天前"
a.from([2007, 0, 29]); // "1 天前"
a.from(new Date(2007, 0, 29)); // "1 天前"
a.from("2007-01-29"); // "1 天前"
与 moment#fromNow
一样,将 true
用作第二个参数会返回不带后缀的值。 无论何时需要有可读的时间长度,这都非常有用。
var start = moment([2007, 0, 5]);
var end = moment([2007, 0, 10]);
end.from(start); // "5 天内"
end.from(start, true); // "5 天"
toNow()
moment().toNow();
moment().toNow(Boolean);
显示时间的常用方法是通过 moment#toNow
处理。 有时称为时间间隔或相对时间。
这类似于 moment.fromNow
,但给出相反的间隔:a.fromNow() = - a.toNow()
。
这类似于 moment.to
,但在当前时间有特殊情况。 如果要控制间隔的两个端点,则使用 moment.to
。
moment([2007, 0, 29]).toNow(); // 4 年内
如果传入 true
,则可以获取不带前缀的值。
moment([2007, 0, 29]).toNow(); // 4 年内
moment([2007, 0, 29]).toNow(true); // 4 年
to()
moment().to(Moment|String|Number|Date|Array);
moment().to(Moment|String|Number|Date|Array, Boolean);
可能想要显示 moment 与现在以外的时间的相对时间。 在这种情况下,可以使用 moment#to
。
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.to(b) // "1 天内"
第一个参数是可以传给 moment()
的任何值或实际的 Moment
。
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.to(b); // "1 天内"
a.to([2007, 0, 29]); // "1 天内"
a.to(new Date(2007, 0, 29)); // "1 天内"
a.to("2007-01-29"); // "1 天内"
与 moment#toNow
一样,将 true
用作第二个参数会返回不带后缀的值。 无论何时需要有可读的时间长度,这都非常有用。
var start = moment([2007, 0, 5]);
var end = moment([2007, 0, 10]);
end.to(start); // "5 天前"
end.to(start, true); // "5 天"
从 2.10.3 版本开始,如果任一端点无效,则结果为本地化的无效日期字符串。
valueOf()
moment().valueOf();
+moment();
moment#valueOf
简单地输出自 Unix 纪元以来的毫秒数,就像 Date#valueOf
一样。
moment(1318874398806).valueOf(); // 1318874398806
+moment(1318874398806); // 1318874398806
要从 Moment
获取 Unix 时间戳(自该纪元以来的秒数),则使用 moment#unix
。
unix()
moment().unix();
moment#unix
输出 Unix 时间戳(自 Unix 纪元以来的秒数)
moment(1318874398806).unix(); // 1318874398
此值的下限为最接近的秒数,且不包括毫秒部分。
daysInMonth()
moment().daysInMonth();
获取当月的天数。
moment("2012-02", "YYYY-MM").daysInMonth() // 29
moment("2012-01", "YYYY-MM").daysInMonth() // 31
toDate()
moment().toDate();
要获取 Moment.js 封装的原生 Date 对象的副本,则使用 moment#toDate
。
这将会返回该 moment 使用的 Date
的副本,因此对该 Date
的任何更改都不会导致 moment 发生变化。 如果要更改 moment 的 Date
,则参阅 moment#manipulate
或 moment#set
。
moment#native
已由 moment#toDate
取代,并已弃用于 1.6.0。
转载自:https://juejin.cn/post/7041014604713394206