likes
comments
collection
share

moment常用方法总结

作者站长头像
站长
· 阅读数 32

add()

moment().add(Number, String); 

moment().add(Duration); 

moment().add(Object);

通过增加时间来改变原始的 moment。

这是一个相当稳健的功能,可以为现有的 moment 增加时间。 若要增加时间,则传入要增加的时间的键、以及要增加的数量。

moment().add(7, 'days');

如果对希望简短,也有一些快捷的键。

moment().add(7, 'd');
快捷键
yearsy
quartersQ
monthsM
weeksw
daysd
hoursh
minutesm
secondss
millisecondsms

如果要同时增加多个不同的键,则可以将它们作为对象字面量传入。

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"
令牌输出
月份M1 2 ... 11 12
Mo1st 2nd ... 11th 12th
MM01 02 ... 11 12
MMMJan Feb ... Nov Dec
MMMMJanuary February ... November December
季度Q1 2 3 4
Qo1st 2nd 3rd 4th
月份的日期D1 2 ... 30 31
Do1st 2nd ... 30th 31st
DD01 02 ... 30 31
年份的日期DDD1 2 ... 364 365
DDDo1st 2nd ... 364th 365th
DDDD001 002 ... 364 365
星期几d0 1 ... 5 6
do0th 1st ... 5th 6th
ddSu Mo ... Fr Sa
dddSun Mon ... Fri Sat
ddddSunday Monday ... Friday Saturday
星期几(语言环境)e0 1 ... 5 6
星期几(ISO)E1 2 ... 6 7
年份的星期w1 2 ... 52 53
wo1st 2nd ... 52nd 53rd
ww01 02 ... 52 53
年份的星期(ISO)W1 2 ... 52 53
Wo1st 2nd ... 52nd 53rd
WW01 02 ... 52 53
年份YY70 71 ... 29 30
YYYY1970 1971 ... 2029 2030
Y1970 1971 ... 9999 +10000 +10001 注意:对于 9999 年以后的日期,这符合 ISO 8601 标准。
周年gg70 71 ... 29 30
gggg1970 1971 ... 2029 2030
周年(ISO)GG70 71 ... 29 30
GGGG1970 1971 ... 2029 2030
子午线AAM PM
aam pm
小时H0 1 ... 22 23
HH00 01 ... 22 23
h1 2 ... 11 12
hh01 02 ... 11 12
k1 2 ... 23 24
kk01 02 ... 23 24
分钟m0 1 ... 58 59
mm00 01 ... 58 59
秒钟s0 1 ... 58 59
ss00 01 ... 58 59
小数秒钟S0 1 ... 8 9
SS00 01 ... 98 99
SSS000 001 ... 998 999
SSSS ... SSSSSSSSS000[0..] 001[0..] ... 998[0..] 999[0..]
时区z or zzEST 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 时间戳X1360013296
Unix 毫秒时间戳x1360013296123

本地化格式

由于首选的格式会根据语言环境而有所不同,因此有一些令牌可用于根据语言环境格式 moment。

同一格式有大小写变体。 小写版本旨在作为大写版本的简化版本。

时间LT8:30 PM
带秒钟的时间LTS8:30:25 PM
月份数字,月份日期,年份L09/04/1986
l9/4/1986
月份名称,月份日期,年份LLSeptember 4, 1986
llSep 4, 1986
月份名称,月份日期,年份,时间LLLSeptember 4, 1986 8:30 PM
lllSep 4, 1986 8:30 PM
月份名称,月份日期,星期几,年份,时间LLLLThursday, September 4, 1986 8:30 PM
llllThu, 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

moment中文文档

转载自:https://juejin.cn/post/7041014604713394206
评论
请登录