一、简介

今天看到奇舞周刊推荐的 day.js,便去试了试,发现还很不错。

之前操作日期和时间都是使用 moment.js,太大了,200多K,而 day.js 只有 2kb 左右,非常轻量。

Github:

支持node和浏览器端使用。

二、基本使用

安装:

yarn add dayjs

引入:

const dayjs = require('dayjs');

dayjs 本质上是个函数,因此需要直接运行该函数,直接运行 dayjs() 的输出结果是:

{ [Number: 1525245275419]
  '$d': 2018-05-02T07:14:35.419Z,
  '$zone': -8,
  '$zoneStr': '+0800',
  '$y': 2018,
  '$M': 4,
  '$D': 2,
  '$W': 3,
  '$H': 15,
  '$m': 14,
  '$s': 35,
  '$ms': 419 }

1)解析

对传入的参数解析,解析出来的就是 dayjs 的对象

1、解析时间字符串

dayjs('2018-05-02');

2、解析Unix时间戳

dayjs(1318781876406);

3、解析Date对象

dayjs(new Date(2018,5,3));

4、解析 dayjs 对象

dayjs(dayjs());

2)克隆

dayjs 对象是不可变的如果要复制对象,需要调用 .clone(),或者是在解析一个 dayjs 对象

dayjs(dayjs());
dayjs().clone();

 3)验证有效

返回 true 或者 false

dayjs().isValid();

4)获取各种时间

1、年

dayjs().year();

2、月

需要注意的是,月份依旧是从 0 开始算起的。

dayjs().month();

3、日

dayjs().date();

4、时

dayjs().hour();

5、分

dayjs().minute();

6、秒

dayjs().second();

7、毫秒

dayjs().millisecond();

5)设置时间

// dayjs().set(unit : String, value : Int);
dayjs().set('hour',1);

dayjs().set('hour',25).hour()

上面的操作,会返回 1 ,说明 day.js 这方面做的也很不错。

另外,dayjs 是不可变的对象,所以会返回新的 dayjs 对象,原有的 dayjs 对象不会发生变化。

6)链式操作

因为操作返回的是 dayjs 对象,所以很多操作都是可以链式调用的。

比如:

dayjs().startOf('month').add(1, 'day').subtract(1, 'year')

1、增加

dayjs().add(7,'day').date()

上面代码输出后会在原有的日期的基础上加上7天,比如今天 5月2日,结果会变成 5月7日

同样的操作可以应用到 year/month/minute/second/

2、减少

dayjs().subtract(7,'month').month();

3、开头时间

dayjs().startOf('year');
dayjs().startOf('month').date();
dayjs().startOf('day').date()

4、结尾时间

dayjs().endOf('year');
dayjs().endOf('month').date();
dayjs().endOf('day').date()

7)格式化显示

如果需要显示格式化的时间,则通过 .format() 即可。

dayjs().format("[YYYY] MM-DDTHH:mm:ssZ"); // "[2014] 09-08T08:02:17-05:00"

1.jpg

8)时间差

dayjs().diff(Dayjs, unit);
dayjs().diff(dayjs(), 'years'); // 0

9)时间戳

获取 unix 毫秒时间戳:

dayjs().valueOf();

获取 unix 秒级时间戳:

dayjs().unix();

10)天数

返回月份的天数

dayjs().daysInMonth();

11)获取 Date 对象

dayjs().toDate();

12)获取数组格式

dayjs().toArray(); //[2018, 8, 18, 00, 00, 00, 000];

13)获取对象

dayjs().toObject();// { years:2018, months:8, date:18, hours:0, minutes:0, seconds:0, milliseconds:0}

14)查询

是否之前:

检查一个 dayjs 对象是否在另一个 dayjs 对象时间之前

dayjs().isBefore(Dayjs);
dayjs().isBefore(dayjs()); // false

是否相同:

dayjs().isSame(Dayjs);
dayjs().isSame(dayjs()); // true

是否之后:

dayjs().isAfter(Dayjs);
dayjs().isAfter(dayjs()); // false

是否是闰年:

dayjs().isLeapYear();
dayjs('2000-01-01').isLeapYear(); // true