javascript 时间处理插件 moment.js

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yzy85/article/details/80369627

因为javascript中没有过多针对时间日期进行处理的原生函数,因此要处理时间,需要自己处理大量代码,效率和正确率都不够高,而moment.js正是针对js时间对象进行快速处理的一个类库,使用它可以轻松快速的处理页面中有关时间处理的问题。

moment.js不依赖任何第三方库,支持字符串、Date、时间戳以及数组等格式传入,可以使用提供的函数格式化日期时间,计算相对时间,获取特定时间后的日期时间等等。

moment主要是对原生的Data对象进行包装,生成自己定义的包装类,通过moment()即可获取该类的对象,为避免产生混淆,所有的moment操作都是通过这个包装对象对内部的Data对象进行操作,从外部来看,我们只需要操作处理包装对象即可完成对内部对象的处理。

参考来源:http://momentjs.cn/docs/#/utilities/

moment.js版本:2.22.1

1、获取时间

var now = moment();//获取当前时间
var now = moment(new Date())//与上面方法表现一样
var day = moment("1995-12-25");//根据传入字符串获取时间
moment("12-25-1995", "MM-DD-YYYY");//根据自定义格式传入参数
moment("2018-01-01 15:25:32", "YYYY-MM-DD HH:mm:ss");
moment({ year :2010, month :3, day :5, hour :15, minute :10, second :3, millisecond :123});//传入对象生成时间
[year, month, day, hour, minute, second, millisecond]
moment([2010, 1, 14, 15, 25, 50, 125]);//传入数组生成时间
moment([2010]);        // January 1st
moment([2010, 6]);     // July 1st
moment([2010, 6, 10]); // July 10th
var a = moment([2012]);
var b = moment(a);//复制moment对象

2、合法性校验

moment(参数).isValid();
new Date(2013, 25, 14).toString(); // "Sat Feb 14 2015 00:00:00 GMT-0500 (EST)"
moment([2015, 25, 35]).format();   // 'Invalid date'
moment("2011-10-10T10:20:90").invalidAt(); // 5 for seconds,返回无效位置,0years,1months,2days,3hours,4minutes,5seconds,6milliseconds

3、提供时间默认值,按照格式或者确定的属性名称

moment(5, "HH");  // today, 5:00:00.000
moment({hour: 5});  // today, 5:00:00.000
moment({hour: 5, minute: 10});  // today, 5:10.00.000
moment({hour: 5, minute: 10, seconds: 20});  // today, 5:10.20.000
moment({hour: 5, minute: 10, seconds: 20, milliseconds: 300});  // today, 5:10.20.300
moment("4 05:06:07", "DD hh:mm:ss");  // this month, 4th day-of-month, 05:06:07.000

4、取值、赋值,类似jquery的attr取值赋值

//毫秒
moment().millisecond(Number);
moment().millisecond(); // Number
moment().milliseconds(Number);
moment().milliseconds(); // Number
//秒
moment().second(Number);
moment().second(); // Number
moment().seconds(Number);
moment().seconds(); // Number
//分钟
moment().minute(Number);
moment().minute(); // Number
moment().minutes(Number);
moment().minutes(); // Number
//小时
moment().hour(Number);
moment().hour(); // Number
moment().hours(Number);
moment().hours(); // Number
//日期,即 天,每7天一循环,超过7天则进到下一周
moment().date(Number);
moment().date(); // Number
moment().dates(Number);
moment().dates(); // Number
//星期 day
moment().day(Number|String);
moment().day(); // Number
moment().days(Number|String);
moment().days(); // Number
moment().day(-7); // last Sunday (0 - 7)
moment().day(7); // next Sunday (0 + 7)
moment().day(10); // next Wednesday (3 + 7)
moment().day(24); // 3 Wednesdays from now (3 + 7 + 7 + 7)
//一年中的第几天
moment().dayOfYear(Number);
moment().dayOfYear(); // Number
//一年中的第几个月,从0开始,超过11则进到下一年
moment().month(Number|String);
moment().month(); // Number
moment().months(Number|String);
moment().months(); // Number
moment().daysInMonth();//对象月份中的天数
moment("2012-02", "YYYY-MM").daysInMonth() // 29,2月有29天
//年
moment().year(Number);
moment().year(); // Number
moment().years(Number);
moment().years(); // Number

5、get/set 取值赋值方式

moment().get('year');
moment().get('month');  // 0 to 11
moment().get('date');
moment().get('hour');
moment().get('minute');
moment().get('second');
moment().get('millisecond');

moment().set('year', 2013);
moment().set('month', 3);  // April
moment().set('date', 1);
moment().set('hour', 13);
moment().set('minute', 20);
moment().set('second', 30);
moment().set('millisecond', 123);

moment().set({'year': 2013, 'month': 3});//数组多项赋值

6、最大值、最小值

var a = moment("2018-01-01");
var b = moment("2018-01-10");
moment.min(a, b);  //a
moment.max(a, b);  //b

7、基本操作

//加法
moment().add(Number, String);
moment().add(7, 'days');moment().add(7, 'd');
moment().add(7, 'days').add(1, 'months'); // with chaining
moment().add({days:7,months:1});
moment().add(Duration);
moment().add(Object);
var duration = moment.duration({'days' : 1});
moment([2012, 0, 31]).add(duration); // February 1
//减法,操作同加法
moment().subtract(Number, String);
moment().subtract(Duration);
moment().subtract(Object);
moment().subtract(7, 'days');
//开始时间
moment().startOf(String);//设置值为年月日等的起始时间
moment().month(0).date(1).hours(0).minutes(0).seconds(0).milliseconds(0);与上面语句表现一致
moment().startOf('year');    // 设置为一年的开始,即 year-01-01 00:00:00
moment().startOf('month');   // 设置为对象月的开始值
moment().startOf('quarter');  // 设置为对象季度开始值
moment().startOf('week');    // 设置为对象周开始值
moment().startOf('day');     // 设置为今天开始,时分秒都为0
moment().startOf('hour');    // 设置当前小时开始,分钟0,秒0
moment().startOf('minute');  // 设置当前分钟,秒为0
moment().startOf('second');  // 设置当前秒与 moment().milliseconds(0)表现一致;
//结束时间,与开始时间取值正好相反
moment().endOf(String);
moment().endOf("year");//设置为当年的结束值,2018-12-31 23:59:59.999
//其它格式设置同上

8、格式化操作,通过format()函数

moment().format();                                // 2018-05-18T22:18:18+08:00
moment().format("YYYY-MM-DD HH:mm:ss"); // 2018-05-18 22:18:18,输出年月日时分秒
moment().format('d');//从周输出日
moment().format('D');//从月份输出日1 2 ... 30 31
moment().format('DD');//从月份输出日01 02 ... 30 31
moment().format('DDD');//从年输出日1 2 ... 364 365
moment().format('DDDD');//从年输出日001 002 ... 364 365

9、时差,2个moment对象之间毫秒差

moment().diff(Moment|String|Number|Date|Array);
moment().diff(Moment|String|Number|Date|Array, String);
moment().diff(Moment|String|Number|Date|Array, String, Boolean);
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b) // 86400000毫秒
a.diff(b, 'days') // 1天
a.diff(b, 'years');       // 1,返回取整差值
a.diff(b, 'years', true); // 1.5,返回大概精确差值,小数

10、转换为Data,Object,数组

moment().toDate();//转换原生Data
moment().toArray(); // [2013, 1, 4, 14, 40, 16, 154];//转化为原生Data对应的数组
moment().toObject()  // {
                     //     years: 2015
                     //     months: 6
                     //     date: 26,
                     //     hours: 1,
                     //     minutes: 53,
                     //     seconds: 14,
                     //     milliseconds: 600
                     // }转换为包含年月日时分秒属性的对象

11、查询比较验证

//是否之前,参数可以是合法时间字符串,moment对象,毫秒数,Data对象,合法组成时间的数组等等
moment().isBefore(Moment|String|Number|Date|Array);
moment().isBefore(Moment|String|Number|Date|Array, String);
moment('2010-10-20').isBefore('2010-10-21'); // true,时间
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false,带比较对象参数
,参数包含year month week day hour minute second
//是否之后,比较方式同上
moment().isAfter(Moment|String|Number|Date|Array);
moment().isAfter(Moment|String|Number|Date|Array, String);
//是否相等,比较方式同上
moment().isSame(Moment|String|Number|Date|Array);
moment().isSame(Moment|String|Number|Date|Array, String);
//是否之间,比较方式同上,需要多输入一个参数
moment().isBetween(moment-like, moment-like);
moment().isBetween(moment-like, moment-like, String);
// where moment-like is Moment|String|Number|Date|Array
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().isLeapYear();
moment([2000]).isLeapYear() // true
moment([2001]).isLeapYear() // false
//是否moment对象
moment.isMoment(obj);
//判断是否Data对象
moment.isDate(obj);
moment.isDate(); // false
moment.isDate(new Date()); // true
moment.isDate(moment()); // false

12、时间段,默认以毫秒为单位,可以从数字、对象、等生成

调用方法:

moment.duration(Number, String);
moment.duration(Number);
moment.duration(Object);
moment.duration(String);
moment.duration(100); // 100 milliseconds,默认毫秒
//指定时间段和类型
moment.duration(2, 'seconds');
moment.duration(2, 'minutes');
moment.duration(2, 'hours');
moment.duration(2, 'days');
moment.duration(2, 'weeks');
moment.duration(2, 'months');
moment.duration(2, 'years');
通过数组形式定义带有多种时间类型的时间段,生成的是moment的Duration对象
moment.duration({    seconds: 2,    minutes: 2,    hours: 2,    days: 2,        months: 2,    years: 2});

通过输入时间参数定义

moment.duration('23:59:59');
moment.duration('23:59:59.999');
moment.duration('7.23:59:59.999');
moment.duration('23:59');          //added in 2.3.0

获取时间段中的某一部分单位,例如获取当前时间段的秒,或者获取当前时间段的以秒为单位的

moment.duration('23:59:59');
moment.duration('23:59:59.999');
//毫秒
moment.duration().milliseconds();//获取时间短的毫秒部分
moment.duration().asMilliseconds();//获取时间段以毫秒表示的总时间
//秒
moment.duration().seconds();
moment.duration().asSeconds();
//分钟
moment.duration().minutes();
moment.duration().asMinutes();
//小时
moment.duration().hours();
moment.duration().asHours();
//天
moment.duration().days();
moment.duration().asDays();
//月
moment.duration().months();
moment.duration().asMonths();
//年
moment.duration().years();
moment.duration().asYears();

时间段的加减法,同时间的加减模式一致

//加法
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

//减法
moment.duration().subtract(Number, String);
moment.duration().subtract(Number);
moment.duration().subtract(Duration);
moment.duration().subtract(Object);
var a = moment.duration(3, 'd');
var b = moment.duration(2, 'd');
a.subtract(b).days(); // 1

转换时间段单位,例如将以秒为单位的时间段转换到小时,获取转换单位的总时间值

moment.duration().as(String);//等同于 asHours()\asMinutes()等方法
duration.as('hours');
duration.as('minutes');
duration.as('seconds');
duration.as('milliseconds');
moment.duration({    seconds: 62,    minutes: 2,    hours: 2,    days: 32,        months: 1,    years: 2}).as('hours');
19034.050555555557
moment.duration({    seconds: 62,    minutes: 2,    hours: 2,    days: 32,        months: 1,    years: 2}).as('months');
26.054163405895473

时间段各单位取值,获取各单位的单独值

moment.duration().get(String);
duration.get('hours');
duration.get('minutes');
duration.get('seconds');
duration.get('milliseconds');
moment.duration({    seconds: 62,    minutes: 2,    hours: 2,    days: 32,        months: 1,    years: 2}).get('hours');
2
moment.duration({    seconds: 62,    minutes: 2,    hours: 2,    days: 32,        months: 1,    years: 2}).get('months');
2

是否是时间段对象:

moment.isDuration(obj);










猜你喜欢

转载自blog.csdn.net/yzy85/article/details/80369627