常用的日期时间处理库Day.js和Moment.js
Day.js 和 Moment.js 都是 JavaScript 中常用的日期时间处理库,功能上有很多重叠,但设计理念和使用体验有显著区别。
- 可变性
- Moment.js 对象是可变的
- 对日期的修改会直接改变原对象,容易导致意外副作用。
- 需要 clone 一个新的对象来操作
- Day.js 对象是不可变的
- Day.js 并没有对原生 Date.prototype 做任何修改, 而是给 Date 对象做了一层封装。 使用支持的数据格式调用 dayjs() 即可取到这个封装的对象。
- Day.js 对象是不可变的,所有的 API 操作都将返回一个全新的实例。
- 体积
- Moment.js
- Moment 无法很好地与现代“tree shaking”算法配合使用,因此它往往会增加 Web 应用程序包的大小。如果需要国际化或时区支持,Moment 可能会变得非常大。
- Day.js
- Moment.js 的 2kB 轻量化方案,拥有同样强大的 API
- 功能扩展方式
- Moment.js
- x
- Day.js
- 采用插件化设计,默认情况下,Day.js 只包含核心的代码,并没有安装任何插件,高级功能(如时区、相对时间、自定义解析)需手动引入插件
var utc = require("dayjs/plugin/utc"); // import utc from 'dayjs/plugin/utc' // ES 2015var timezone = require("dayjs/plugin/timezone"); // dependent on utc plugin // import timezone from 'dayjs/plugin/timezone' // ES 2015dayjs.extend(utc); dayjs.extend(timezone);const timestamp = "2014-06-01 12:00"; const tz = "America/New_York";const dayjsLocal = dayjs(timestamp); //assumes UTC //dayjsLocal.toISOString() -> 2014-06-01T12:00:00.000Z //dayjsLocal.format('YYYY-MM-DDTHH:mm:ss') -> 2014-06-01T12:00:00const dayjsAmerica = dayjsLocal.tz(tz); //existing time treated as UTC //dayjsAmerica.toISOString() -> 2014-06-01T12:00:00.000Z //dayjsAmerica.format('YYYY-MM-DDTHH:mm:ss') -> 2014-06-01T08:00:00const dayjsAmericaKeep = dayjsLocal.tz(tz, true); //existing time treated as local time //dayjsAmericaKeep.toISOString() -> 2014-06-01T16:00:00.000Z //dayjsAmericaKeep.format('YYYY-MM-DDTHH:mm:ss') -> 2014-06-01T12:00:00
- 先到这,后面补。。。。