创建Moment
对象后,有时需要对其进行一些加减等操作,Moment
中提供了一些方法来完成这些操作。
Moment
使用了连续接口模式,也叫做方法链。这让你可以像这样像下面这样进行方法调用:
1. 加法(Add)
moment().add(Number, String);
moment().add(Duration);
moment().add(Object);
对原moment
进行时间增加操作。
这是一个优雅而健壮的方法,使你可以对已经存在的moment
进行时间增加操作。通过一个时间单位和增加量,可以实现对时间的增加操作。
moment().add(7, 'days');
也可以通过简写形式实现这些操作:
moment().add(7, 'd');
```对一个时间增加多个时间单位时,可以通过一个对象实现:
moment().add(7, ‘days’).add(1, ‘months’); // 方法链实现
moment().add({days:7,months:1}); // 对象字面量实现
你可以通过任意级别的时间参数,实现时间的增加操作:
moment().add(1000000, ‘milliseconds’); // 100万毫秒
moment().add(360, ‘days’); // 30天
**对月和年的特殊考虑**
当增加月后,如果目标月的天数超过出最大值,将变为目标月的最后一天:
moment([2010, 0, 31]); // 1月31
moment([2010, 0, 31]).add(1, ‘months’); // 2月28
var m = moment(new Date(2011, 2, 12, 5, 0, 0)); // 美国夏令时前的一天
m.hours(); // 5
m.add(24, ‘hours’).hours(); // 6
当为夏令时增加小时、分钟、秒或毫钞时,如你想增加一个明确的小时数,返回值会返回一个不同的小时数:
var m = moment(new Date(2011, 2, 12, 5, 0, 0)); // 美国夏令时前的一天
m.hours(); // 5
m.add(24, ‘hours’).hours(); // 6
2. 减法(Subtract)
moment().subtract(Number, String);
moment().subtract(Duration);
moment().subtract(Object);
对原moment
进行时间减少操作。
减少时间的方法与增加时间的方法moment().add()相似,只是把增加时间变成了减少时间:
moment().subtract(7, 'days');
3. 开始时间 (Start of Time)
moment().startOf(String);
对原moment
设置为某一时间的单位的起始时间。
moment().startOf('year'); // 设置为今年1月第一天的 12:00 am
moment().startOf('month'); // 设置为本月第一天的 12:00 am
moment().startOf('quarter'); // 设置为本季度第一个月第一天的 12:00 am
moment().startOf('week'); // 设置为本周第一天的 12:00 am
moment().startOf('isoWeek'); // 设置为ISO本周的第一天的 12:00 am
moment().startOf('day'); // 设置为今天的 12:00
moment().startOf('hour'); // 设置为当前时间的小时,0分0秒0毫秒
moment().startOf('minute'); // 设置为当前的时间的分钟,according
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);
对原moment
设置为某一时间的单位的结束时间。
4. 结束时间 (End of Time)
moment().endOf(String);
与moment().startOf()相同,只是将开始时间变成了结束时间:
moment().endOf("year"); // 设置为今年的 12-31 11:59:59.999 pm
5. 最大值(Maximum)
moment().max(Moment|String|Number|Date|Array);
将当前moment
时间设置为和另一个moment
时间相比较大值的一个,a.max(b)与a = moment.min(a, b)
相同。
这是和moment.min
相对的一方法:
var momentFromServer = moment(input);
var clampedMoment = momentFromServer.max();
通过moment.max
方法与任意格式的有时间,与moment()
取最大值:
moment().max(moment().add(1, 'd'));
moment().max("2013-04-20T20:00:00+0800");
moment().max("Jan 1 2001", "MMM D YYYY");
moment().max(new Date(2012, 1, 8));
6. 最小值(Minimum)
moment().min(Moment|String|Number|Date|Array);
将当前moment
时间设置为和另一个moment
时间相比较小值的一个,a.min(b)与a = moment.max(a, b)
相同。
这是和moment.max
相对的一方法:
moment().min("2013-04-20T20:00:00+0800");
通过moment.max
方法,可以对moment
进行各级别的时间设置:
var start = moment().startOf('week');
var end = moment().endOf('week');
var actual = moment().min(start).max(end);
7. 本地化(Local)
moment().local();
对原moment
时间设置一个标志,对其内部使用Date#get*
和Date#set*
代替Date#getUTC*
和Date#setUTC*
。
var a = moment.utc([2011, 0, 1, 8]);
a.hours(); // 8 UTC
a.local();
a.hours(); // 0 PST
UTC模式请参考:moment.utc()。
8. UTC
moment().utc();
对原moment
时间设置一个标志,对其内部使用Date#getUTC*
和Date#setUTC*
代替Date#get*
和Date#set*
。
UTC模式请参考:moment.utc()。
9. UTC 偏移量(UTC Offset)
moment().utcOffset();
moment().utcOffset(Number|String);
设置或获取一个以分为单位的UTC偏移量。
获取当前对象的UTC偏移量:
moment().utcOffset(); // (-240, -120, -60, 0, 60, 120, 240, etc.)
对当前时间设置一个明确的UTC 偏移分钟数。设置分钟数后,其本身并不会发生改变。如果你要使用某地的时区时间,要用moment-timezone
进行设置:
moment().utcOffset(120);
当输入小于16
且小于-16
时,moment
会理解为输入的是小时:
moment().utcOffset(8); // 设置小时偏移量
moment().utcOffset(480); // 设置分钟偏移量 (8 * 60)
也可以通过字符串形式进行设置:
moment().utcOffset("+08:00");
moment().utcOffset(8);
moment().utcOffset(480);
当通过字符串进行设置时,moment().utcOffset
会首先匹配+00:00 +0000 -00:00 -0000
,即使你输入了ISO 8601格式的字符串,moment也会将成变成这个UTC 偏移量。
输入的字符串要以+
和-
的形式开头,如果不以这种形式开头会被解释为"+00:00"
。
moment().utcOffset("2013-03-07T07:00:00+08:00");
10. 时区偏移量(Timezone Offset)
moment().zone();
moment().zone(Number|String);
设置或获取一个以分钟为单位的时区偏移量。
moment().zone(); // (60, 120, 240, etc.)
当输入小于16
且小于-16
时,moment
会理解为输入的是小时:
// 以下是同一种设置方式
moment().zone(480);
moment().zone(8);
也可以通过字符串形式进行设置:
moment().zone("-08:00");
当通过字符串进行设置时,moment().zone
会首先匹配+00:00 +0000 -00:00 -0000
,即使你输入了ISO 8601格式的字符串,moment也会将成变成这个时区偏移量。
moment().zone("2013-03-07T07:00:00-08:00");