Day.js:轻量化的 Javascript 时间日期库

近日,Moment.js 宣布项目正式进入维护阶段。这意味着,这个最受欢迎的 Javascript 时间日期库,已经不会再添加新功能,也不会进行任何重大更改,并可能选择不修复项目中的 bug,且项目作者建议转用其他库。那么,抛开 Moment.js,我们还有什么可以选择的时间日期库呢?Day.js,作为 Moment.js 的轻量级方案,其使用了类似的 API,使得开发者能够快速上手。同时,其轻量化、高兼容性、数据不可变、多语言按需加载等特性,都使得 Day.js 成为一个值得关注的 Moment.js 的替代品。

Day.js - 轻量化的 Javascript 时间日期库

Day.js时间日期库

简介

Day.js,是 iamkun 在 Github 上开源的处理时间和日期的 Javascript 库,项目位于 https://github.com/iamkun/dayjs,且在 Gitee 上也有维护 https://gitee.com/iamkun/dayjs,目前版本为 v1.8.35。

Day.js 使用与 Moment.js 相同的 API 和用法,使得拥有 Moment.js 经验的开发人员可以快速上手。 Day.js 十分轻量级,大小仅 2kB,减轻了前端加载压力,下载、解析和执行更少的 Javascript。对于多国语言,默认不打包到工程里,需要时手动加载即可,对国际化支持良好。 Day.js 改变了 Moment.js 中颇为令人诟病的特性:时间日期对象是可变的。Day.js 所有的 API 操作都返回一个新的 Dayjs 对象,避免了 bug 的产生,节约调试时间。 Day.js 对浏览器的有很好的兼容性,支持包括 IE 8, 9 在内的所有现代浏览器。

Day.js - 轻量化的 Javascript 时间日期库

Day.js Github项目

安装

Day.js 可以运行在 Node.js 和浏览器中。在 Node.js 项目中使用,使用 NPM 安装:

npm install dayjs --save

然后再项目代码中引入即可:

var dayjs = require(\'dayjs\')
//import dayjs from \'dayjs\' // ES 2015
dayjs().format()

在浏览器中,可以使用 CDN 引入:

<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js">script>
<script>
  dayjs().format()script>

默认情况下,Day.js 只包含核心的代码,并没有安装任何插件。可以通过加载插件来满足各类需求。在 Node.js 中,把插件引入代码后,使用 dayjs.extend 加载插件:

var AdvancedFormat = require(\'dayjs/plugin/advancedFormat\')
// import AdvancedFormat from \'dayjs/plugin/advancedFormat\' // ES 2015
dayjs.extend(AdvancedFormat) // use plugin

浏览器中也是类似的使用方法,但插件名称小写下划线风格,Day.js 为所有插件提供了 CDN:

<script src="path/to/dayjs/plugin/advancedFormat">script>

<script>
  dayjs.extend(window.dayjs_plugin_advancedFormat)
script>
Day.js - 轻量化的 Javascript 时间日期库

Day.js浏览器兼容

示例

Day.js 功能齐全,能够满足绝大部分的日期时间处理需求,API 包括:

  • 解析:解析其他形式的时间表示,获得一个 Day.js 对象实例
  • 取值/赋值:Day.js 对象的 getter 和 setter
  • 操作:时间的加、减和 UTC 偏移等
  • 显示:Day.js 对象的格式化和序列化
  • 查询:对时间对象进行不同条件的判断
  • 国际化(i18n):不同国际化语言的配置
  • 自定义:对 Day.js 进行自定义,包括创建新的语言配置等
  • 时长(duration):时间段类型,需要 Duration 插件
  • 时区:配置不同时区下的时间
Day.js - 轻量化的 Javascript 时间日期库

Day.js 文档首页

我们来看一个最简单的使用例子:

var now = dayjs()

在这个例子中,我们调用了 dayjs 方法,获取得到了表示当前时间的 Day.js 对象。 Day.js 对原生的 Date 对象做了一层封装,使用支持得数据格式去调用 dayjs() 方法,即可获取到这个封装的对象。我们可以传入一个 ISO 8601 格式的时间字符串进行解析:

dayjs(\'2018-04-04T16:00:00.000Z\')

而对于其他格式的字符串,可以加载 CustomParseFormat,并提供格式进行解析:

dayjs.extend(customParseFormat)
dayjs("12-25-1995", "MM-DD-YYYY")

如果想要解析包含本地语言的日期字符串,可以传入语言参数:

require(\'dayjs/locale/zh-cn\')
dayjs(\'2018 三月 15\', \'YYYY MMMM DD\', \'zh-cn\')

另外,还可以传入布尔参数,控制是否启动严格解析模式:

dayjs(\'1970-00-00\', \'YYYY-MM-DD\').isValid() // true
dayjs(\'1970-00-00\', \'YYYY-MM-DD\', true).isValid() // false

dayjs 方法也可以传入Unix时间戳,支持秒或毫秒:

dayjs.unix(1318781876)
dayjs(1318781876406)

默认情况下,Day.js 解析为本地时间,也可以加载 UTC 插件启用 UTC 模式:

dayjs.extend(utc)
// 默认是当地时间
dayjs().format() //2019-03-06T08:00:00 08:00
// UTC 时间
dayjs.utc().format() // 2019-03-06T00:00:00Z

Day.js 的 getter 和 setter 使用相同的 API,不传参数调用时为 getter,传入参数时为 setter:

dayjs().year()
dayjs().year(2000)
dayjs().hour()
dayjs().hour(12)

Day.js 支持日期对象的加和减,支持各级的时间单位:

dayjs().add(7, \'day\')
dayjs().subtract(7, \'year\')

还能获取特定时间单位的起始时间和结束时间:

dayjs().startOf(\'year\')
dayjs().endOf(\'month\')

Day.js 支持使用占位符返回格式化后的日期表示:

dayjs().format()
// 默认返回的是 ISO8601 格式字符串 \'2020-04-02T08:02:17-05:00\'
dayjs(\'2019-01-25\').format(\'[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]\')
// \'YYYYescape 2019-01-25T00:00:00-02:00Z\'
dayjs(\'2019-01-25\').format(\'DD/MM/YYYY\') // \'25/01/2019\'

也支持如 Array、JSON 等格式的序列化:

dayjs.extend(toArray)
dayjs(\'2019-01-25\').toArray() // [ 2019, 0, 25, 0, 0, 0, 0 ]

Day.js 提供了丰富的比较和判断方法:

dayjs().isBefore(dayjs(\'2011-01-01\')) // 是否在之前
dayjs(\'2010-10-20\').isBetween(\'2010-10-19\', dayjs(\'2010-10-25\')) // 是否在期间
dayjs(\'2000-01-01\').isLeapYear() // 是否为闰年

Day.js 支持国际化,可以通过加载语言配置,实现不同地区的日期时间处理方式:

require(\'dayjs/locale/zh-cn\')
// import \'dayjs/locale/zh-cn\' // ES 2015
dayjs.locale(\'zh-cn\') // 全局使用
dayjs().locale(\'zh-cn\').format() // 当前实例使用

除了表示时间点的 Day.js 对象外,Day.js 还提供了表示时间段的 duration:

dayjs.extend(duration)
dayjs.duration({ months: 12 })

可以结合 Day.js 对象,实现时间加减等操作:

var a = dayjs.duration(1, \'d\');
var b = dayjs.duration(2, \'d\');
a.add(b).days(); // 3
a.add({ days: 2 } ).days();
a.add(2, \'days\');
Day.js - 轻量化的 Javascript 时间日期库

Day.js日期时间库

总结

Day.js 作为一个 Javascript 日期时间库,沿用了 Moment.js 优秀的 API,并使用插件化和配置按需加载的方式,大大减小了库的体积,做到了轻量化和灵活化。其功能丰富,能满足绝大部分的日期时间处理需求,还可以自行编写插件和配置,对库进行扩展,功能强大,且兼容性强,支持所有现代浏览器。Day.js 在继承了 Moment.js 的优秀特性的基础上,解决了包括对象可变等遗留问题,抛弃了历史包袱,在 Moment.js 已不再积极维护的今天而言,Day.js 无疑是最好的替代品。

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/11733.html

发表评论

登录后才能评论