一个日期处理类库moment.js

5,413 阅读2分钟

“Moment.js 是一个JavaScript 日期处理类库,用于解析、检验、操作、以及显示日期.” —— 官方如是说道

这个日期处理库基本上贯彻了小而美的原则,基本上你能想到的对日期的操作和格式化里面都有,支持多种语言的转换,也有官方的中文文档。

用到这个库是因为工作需求要手撸一个价格日历,找了一下没有合心意的库,在找的过程中发现好几个开源的日历组件都用到了这个库,一用果然美滋滋。

官方文档的地址为http://momentjs.cn/docs/,文档里面方法太多了,下面介绍几个常用的方法,包括日期对象构建、日期格式化、日期加加减减、年月日的置换,基本能实现出一个日历该有的所有功能。

moment(string)

  • 返回一个moment类型的对象,相当于日期对象的构造器
  • 可以检查日期是不是对的,杂七杂八的字符串都能识别
  • 不给参数默认返回今天
moment('2017 02 03')
moment('2017-1-3')
moment('2017 1 1')

[moment].format('YYYY-MM-DD')

  • 接受一个moment类型,返回一个格式化过的字符串
  • 参数决定了怎么格式化字符串(入参细则详见官方文档)
moment('2018 1 1').format('YYYY-MM')
=> '2018-01'

moment().format("dddd, MMMM Do YYYY");
=> "Sunday, February 14th 2010"

[moment].add(num, 'year/month/days')

  • 喜加一
  • 第一个参数是选择增加的数量,第二个参数是增加的对象
moment('2018-01-01').add(2, 'year')
=> '2020-01-01'

[moment].subtract(num, 'years/months/days')

  • 减一

[moment].set('year/month/date', num)

  • 令设置的部分为num
  • 注意月份为0-11
  • 用这个设置年月日的好处是,一些invalid值会被cover,比如
moment('2013-01-31').set('month', 1).format('YYYY-MM-DD')
=> '2013-02-28' //二月只到28号

[moment].diff([moment], 'days/months/years')

  • 计算日/月/年差
moment(departureDate).diff(moment(), 'days');

[moment].isBetween(string, string)

  • moment对象是否处于两个日期字符串之间
moment().isBetween(item.startDate, item.endDate)

[moment].isSame('2010-10-20')

  • 比较两个日期是否相同
moment('2010-10-20').isSame('2010-10-20')

上面只是我个人经验总结出来的一些方法,详细参数和更多方法可查阅官方文档http://momentjs.cn/docs/

很欣赏这个库,函数式的写法十分清新,光看名字就能知道什么方法可以做什么,边界保护写的很好,源码也是功能模块划分的整整齐齐,从里到外都让人十分舒服。