我刚刚花了几天时间将Adventure系统的API测试全部重构了一遍,看着386个测试在CI上跑起来,内心未免些许激动。
然而,作为一个半路出家的JavaScript选手,在编写Scripts时,常常受限于薄弱的编码能力,不得不放弃一些厉害的Case、编写的代码也不够简洁。比如,我常常需要处理诸如“2018-06-08”、“2018-06-08”、“20180608”、“20180608 00:00:00”、“2018/06/08”, 以及TimeStamp等各种花样的时间问题,真叫人抓耳挠腮。举个例子,为了以“20180608”的格式展示当天日期,我分别取到year、Month、Day,然后拼接成想要的格式。虽实现了功能,但方法却着实笨了些。
let now = new Date();
let today = now.getFullYear() + ((now.getMonth()+1) < 10 ? '0'
+(now.getMonth() +1) : now.getMonth() +1) + (now.getDate() < 10 ? '0'
+ now.getDate() : now.getDate());
我想,如果我曾经是以这样的编码水平来应聘骚窝的Dev,一定无法通关????????????。
好在,好学的七姑娘及时去找Dev小齐同学,企图寻求一些优秀的解决方案。这不,小齐同学帮我引入一个JavaScript日期处理类库【Moment.js】, 一行代码就解决了问题。
let today = moment().format('YYYY-MM-DD');
细细研究之后,七姑娘认为这个Moment.js却是值得墙裂推荐给反复“玩弄”日期的同学(专业写js的同学请不要笑话我的浅薄????)。
Moment.js是一个JavaScript日期处理类库,它能够在浏览器、Node.js、Require.js等多种js框架中工作。我是将其引入“Supertest+Mocha+Chai+Grunt”的API测试框架中。这里只列举一些常用的方法,更多精彩,还请移步【Moment.js官网】。
1. Install
npm install moment --save # npm
2. 引入Moment.js库
const moment = require('moment');
3. 获取当前时间
moment();
相当于
moment(new Date());
打印结果为:moment(“2018-06-08T16:46:41.488”)
4. 日期格式化
moment().format();
moment().format(String); //例如:moment().format("YYYY-MM-DD");
这里的format支持很多格式, 比如:“YYYY-MM-DD”、“YYYY-MM-DD HH:MM:SS”等多种你需要的格式。
处理之外,Moment还可以计算相对时间,比如:
moment("20111031", "YYYYMMDD").fromNow(); // 7 年前
moment("20120620", "YYYYMMDD").fromNow(); // 6 年前
moment().startOf('day').fromNow(); // 17 小时前
moment().endOf('day').fromNow(); // 7 小时内
moment().startOf('hour').fromNow();
5. 取值
可以获取当前的年月日时分秒等。
moment().year(); //获取当前年
moment().month() //获取当前月
moment().weekday(); //获取当前的星期(区域标准)
moment().date(); //获取当前的日期
moment().hour(); //获取当前的小时
moment().minute(); //获取当前的分钟数
moment().second(); //获取当前的秒数
moment().millisecond(); //获取当前的毫秒数
moment().quarter(); //获取当天为一年中的第几季度
moment().week(); //获取当天为一年中的第几周
moment().dayOfYear(); //获取当天为一年中的第几天
或者这样使用。
moment().get('year');
moment().get('month'); // 0 to 11
moment().get('date');
moment().get('hour');
moment().get('minute');
moment().get('second');
moment().get('millisecond');
6. 赋值
可以获取当前的年月日时分秒等。
moment().year(Number); //获取当前年
moment().month(Number) //获取当前月
moment().weekday(Number); //获取当前的星期(区域标准)
moment().date(Number); //获取当前的日期
moment().hour(Number); //获取当前的小时
moment().minute(Number); //获取当前的分钟数
moment().second(Number); //获取当前的秒数
moment().millisecond(Number); //获取当前的毫秒数
moment().quarter(Number); //获取当天为一年中的第几季度
moment().week(Number); //获取当天为一年中的第几周
moment().dayOfYear(Number); //获取当天为一年中的第几天
或者这样使用。
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': 2018, 'month': 3});