moment.js常用用法

moment("12-25-1995", "MM-DD-YYYY"); //返回一个moment对象,第二个字符串格式

常见用法
moment("3-2014", "Q-YYYY"); //Q指的是季度
moment("3-2014", "x"); //小写x是毫秒级,大写x是秒级
moment("125-2014", "DDD-YYYY"); //DDD是一年中的第几天


如果设置的时间为非法时间,使用isValid()方法验证,将返回false

moment('2010 11 31').isValid(); //false

你可以使用表示时间单位的对象来创建Moment,如下:
moment({ years:2010, months:3, date:5, hours:15, minutes:10, seconds:3, milliseconds:123});
moment({ y :2010, M :3, d :5, h :15, m :10, s :3, ms :123});//缩写


使用Unix 偏移量(毫秒)进行初始化
moment(number) 例:moment(1567851564654)

使用Unix 时间戳(秒)进行初始化
moment.unix(number) 例: moment.unix(86453456445654)

Moment对象复制
隐式调用moment()方法进行复制
var a = moment([2012]);
var b = moment(a);

显示利用moment.clone()方法进行复制
var a = moment([2012]);
var b = a.clone();

------------------------------------------------------

GET/SET

Moment.js使用了重载的getter和setters,你可能在jQuery上见过这种方式。在不指定参数时调用这些方法是一个getter,
指定参数时调用这些方法是一个setters

moment().seconds(30) === new Date().setSeconds(30);
moment().seconds() === new Date().getSeconds();
utc下的映射关系
moment.utc().seconds(30) === new Date().setUTCSeconds(30);
moment.utc().seconds() === new Date().getUTCSeconds();

秒的设置与取值,其它类似:
moment().second(Number);
moment().second(); // Number
有效输入值为 0〜59,超出后将影响相应的分。

取值(Get)
moment().get('year');
moment().get('month'); // 0 to 11
moment().get('date');
moment().get('millisecond'); //0 to 999
赋值(Set)
moment().set(String, Int);
moment().set(Object(String, Int));
moment().set('year', 2013);
moment().set('month', 3); // 四月
moment().set('date', 1);
moment().set('millisecond', 123);

moment().set({'year': 2013, 'month': 3});

moment.max(Moment[,Moment...]) 返回其中的最大值,同理最小值moment.min(Moment[,Moment...])

var a = moment().subtract(1, 'day');
var b = moment().add(1, 'day');
moment.max(a, b); // b


------------------------------------------------

日期时间的加减等操作

Moment使用了连续接口模式,也叫做方法链。这让你可以像这样像下面这样进行方法调用:
moment().add(7, 'days').subtract(1, 'months').year(2009).hours(0).minutes(0).seconds(0);

加法(Add)
moment().add(Number, String);例:moment().add(7, 'days');后面的描述单位的可以缩写

对一个时间增加多个时间单位时,可以通过方法链,也可以通过一个对象实现:
moment().add(7, 'days').add(1, 'months'); // 方法链实现
moment().add({days:7,months:1}); // 对象字面量实现


减法(Subtract)
moment().subtract(Number, String);例:moment().subtract(7, 'days');后面的描述单位的可以缩写

开始时间 (Start of Time) 对原moment设置为某一时间的单位的起始时间。
moment().startOf(String);

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

结束时间 (End of Time)类似于开始时间
moment().endOf(String);

moment().endOf("year"); // 设置为今年的 12-31 11:59:59.999 pm


本地化(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();
对原moment时间设置一个标志,对其内部使用Date#getUTC*和Date#setUTC*代替Date#get*和Date#set*


UTC 偏移量(UTC Offset)
moment().utcOffset(); //设置或获取一个以分为单位的UTC偏移量。注意是以分为单位
moment().utcOffset(Number|String);

获取当前对象的UTC偏移量:
moment().utcOffset(); // (-240, -120, -60, 0, 60, 120, 240, etc.)

当输入小于16且小于-16时,moment会理解为输入的是小时

moment().utcOffset(8); // 设置小时偏移量
moment().utcOffset(480); // 设置分钟偏移量 (8 * 60)

客户端与服务器不在同一时区

一般遇到时区问题,要考虑清楚,统计当天数据或者判断在当天内等情况时,  需要先进行偏移,注意时区偏移取  偏移量的相反数,比如东八区是(-8),utcoffset里面就是(-(-8)),

再进行startOf('day')    例:moment(new Date()).utcoffset(8).startOf()

 

时区偏移量(Timezone Offset),应该是与UTC偏移量相反,(UTC偏移量是指相对于UTC时间,时区偏移量是指相对于本地)

设置或获取一个以分钟为单位的时区偏移量。 注意是以分为单位
moment().zone();
moment().zone(Number|String);


-----------------------------------------------------------

日期时间的格式化

格式化(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("x"); //1360013296123
moment().format('YYYY MM DD'); // "Invalid date"


时差 (之前,相对于当前时间)
moment([2007, 0, 29]).fromNow(); // 10年前
如果设置为true,会得到一个不含后缀的值:
moment([2007, 0, 29]).fromNow(); // 10年前
moment([2007, 0, 29]).fromNow(true); // 10年

时差 (之前)
如果你想显示一个moment时间与另一个的关系,可以使用moment().from()方法:
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b) // "a day ago"-1天前


与moment().from()一样,也可以设置第二个参数为true,然后得到一个不含后缀的值。这在显示两个时间之间的时差时,非常有用:
var start = moment([2007, 0, 5]);
var end = moment([2007, 0, 10]);
end.from(start); // "in 5 days"
end.from(start, true); // "5 days"

时差(之后) moment('').toNow() 与 moment('').fromNow相反


时差 (毫秒) 获取一个毫秒级的时差,moment().diff()方法类似于moment().from()方法。
moment().diff(Moment|String|Number|Date|Array);

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b) // 86400000

Unix 偏移量 (毫秒) moment().valueOf()会简单的输出一个毫秒级的Unix时间偏移量,类似于Date.valueOf()。

moment().valueOf();
moment().valueOf(); // 1318874398806

Unix 时间戳 (秒) moment().unix()会返回一个Unix时间戳
moment().unix();
moment(1318874398806).unix(); // 1318874398 注意单位是秒

日期装换:天数,Date对象,数组,对象
天数 (月)
moment().daysInMonth(); 获取当前月的天数。

moment("2012-02", "YYYY-MM").daysInMonth() // 29
moment("2012-01", "YYYY-MM").daysInMonth() // 31


JavaScript Date对象
moment().toDate(); 通过Moment.js获取一个JavaScript Date对象,使用moment().toDate()方法
将要返回的Date是moment正在使用的对象,所以任何对Date的修改也会导致moment改变。如果你只想获取一个Date副本,
应该在调用moment().toDate()方法前使用moment().clone()方法。

数组
moment().toArray(); 返回一个数组,返回值是new Date()参数的镜像。
moment().toArray(); // [2013, 1, 4, 14, 40, 16, 154];[年,月,日,时,分,秒,毫秒]

对象
moment().toObject(); 返回一个包括:年、月、日、时、分、秒、毫秒的对象
moment().toObject() // {
// years: 2015
// months: 6
// date: 26,
// hours: 1,
// minutes: 53,
// seconds: 14,
// milliseconds: 600
// }

 

----------------------------------------------------------------

日期时间的查询

1. 是否之前:isBefore()
moment().isBefore(Moment|String|Number|Date|Array); 检查moment是否在另一个时间之前。
例:moment('2010-10-20').isBefore('2010-10-21'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第二个参数设置要比较的单位。
当设置了第二个参数后,不仅仅会比较这一个级别的单位,当以天为单位比较时,同时会比较年、月、日。
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true

支持year month week day hour minute second,不支持milliseconds

2. 是否相同:isSame() 有时候很实用

moment().isSame(Moment|String|Number|Date|Array); 检查moment是否和另一个时间相同。
例:moment('2010-10-20').isSame('2010-10-20'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第二个参数设置要比较的单位。可以用来比较是否在同一年,同一个月,或者同一天等等

moment('2010-10-20').isSame('2009-12-31', 'year'); // false
moment('2010-10-20').isSame('2010-01-01', 'year'); // true
moment('2010-10-20').isSame('2010-12-31', 'year'); // true
moment('2010-10-20').isSame('2011-01-01', 'day'); // false

当设置了第二个参数后,不仅仅会比较这一个级别的单位。输入低级别的单位后,也同时会比较其上级单位,
如:当以天为单位比较时,同时会比较年、月、日。
moment('2010-01-01').isSame('2011-01-01', 'month'); // false, 年不同
moment('2010-01-01').isSame('2010-02-01', 'day'); // false, 月不同

3. 是否之后:isAfter() 跟isBefore()相反

4. 是否之间:isBetween()

moment().isBetween(moment-like, moment-like); 检查moment是否在另外两个时间之间,可选比较单位可以是:分、小时、天等。
检查moment是否在另外两个时间之间,可选比较单位可以是:分、小时、天等。
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true

如果你想将比较粒度限制为毫秒以外的单位,可以在第三个参数设置要比较的单位。
moment('2010-10-20').isBetween('2010-01-01', '2012-01-01', 'year'); // false
moment('2010-10-20').isBetween('2009-12-31', '2012-01-01', 'year'); // true


5. 是否闰年:isLeapYear() moment().isLeapYear()在是闰年是返回true,否则返回false。

6.是否Moment对象:isMoment() moment.isMoment()方法用于检查,是否是一个moment对象。

7.是否Date对象:isDate() moment.isDate()方法用于检查,是否是一个JavaScript Date对象。


-----------------------------------------------------

时间段(Durations)

1. 创建时间段:duration()

moment.duration(Number, String);
moment.duration(Number);
moment.duration(Object);
moment.duration(String);


创建一个时间段,通过moment.duration()方法并传入一个毫秒级的时间戳。
moment.duration(100); // 100 毫秒

如果你想在创建时间段时使用非毫秒级的单位,你可以像这样传入时间单位: 可以使用简写
moment.duration(2, 'seconds');
moment.duration(2, 'minutes');
moment.duration(2, 'hours');

像moment#add一样,你可以按需要传入一个包含多个单位的对象。
moment.duration({
seconds: 2,
minutes: 2,
hours: 2,
days: 2,
weeks: 2,
months: 2,
years: 2
});

最后还可以传入一个字符串创建时间段

moment.duration('23:59:59'); 秒的部分还支持这样23:59:59.999


2. 增加时间:add() 对原时间段增加时间。
moment.duration().add(Number, String);
moment.duration().add(Number);
moment.duration().add(Duration);
moment.duration().add(Object);
在创建时间段时使用的简写形式的时间单位,在这里也同样适用。可以第二个参数中传入。
var a = moment.duration(1, 'd');
var b = moment.duration(2, 'd');
a.add(b).days(); // 3

3.是否时间段:isDuration()
moment.isDuration(obj); 检查是否是一个有效的时间段对象,使用moment.isDuration()

moment.isDuration() // false
moment.isDuration(new Date()) // false
moment.isDuration(moment()) // false
moment.isDuration(moment.duration()) // true
moment.isDuration(moment.duration(2, 'minutes')) // true

 

posted @ 2017-06-25 15:55  想当主播的17岁程序员  阅读(3467)  评论(0编辑  收藏  举报