momentjs 使用笔记
解析
解析字符串moment(string),默认使用ISO 8601格式解析
如果不能识别,降级为new Date(string)识别,
注意时区
注意: js new Date()里里默认使用GMT作为标准时间,如果传入其它标准时间关键字,会识别不准确
例如CST,在中国就会多出14个小时,
1 | new Date('Thu Oct 24 10:45:31 CST 2019') // Fri Oct 25 2019 00:45:31 GMT+0800 (中国标准时间) |
因为带有CST关键字后,会默认北美时区(-6),显示再转换为本地的时区(中国+8),就会多出14个小时
CST
美国中部时间:Central Standard Time (USA) UT-6:00
澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
中国标准时间:China Standard Time UT+8:00
古巴标准时间:Cuba Standard Time UT-4:00
解决办法,可以加14个小时,或者删除关键字
1 | new Date('Thu Oct 24 10:45:31 CST 2019'.replace('CST', '')) // Thu Oct 24 2019 10:45:31 GMT+0800 (中国标准时间) |
更具浏览器兼容性不同,选择合适的方法
当前时间
如果moment没有参数时moment(),会返回当前时间的实例
基本等同于moment(new Date())和moment(undefined),但moment(null)无法解析
已知时间格式
如果已知了new Date()无法识别的时间格式,可以传入moment第二个参数,来正确的解析时间参数
1 | moment('2012-12-13 14:15:16', 'YYYY-MM-DD HH:mm:ss') |
这里关键字含义如下,区分大小写
| 输入 | 示例 | 描述 |
|---|---|---|
| YYYY | 2014 | 4 或 2 位数字的年份 |
| YY | 14 | 2 位数字的年份 |
| M | 1 - 12 | 月份 |
| MM | 01 - 12 | 月份,两位数 |
| D | 1-31 | 一个月中的某天 |
| DD | 01-31 | 一个的某天,两位数 |
| H | 0-23 | 小时 |
| HH | 00-23 | 小时,两位数 |
| h | 1-12 | 小时,12小时制 |
| hh | 01-12 | 小时,12小时制,2位数字 |
| m | 0-59 | 分钟 |
| mm | 00-59 | 分钟,两位数 |
| s | 0-59 | 秒 |
| ss | 00-59 | 秒,两位数 |
| S | 0-9 | 百毫秒,1位数 |
| SS | 00-99 | 十毫秒,两位数 |
| SSS | 000-999 | 毫秒,三位数 |
| Z | -05:00 | UTC 偏移量 |
| ZZ | -0500 | UTC 偏移量,两位 |
| A | 上午下午 | 后或事前子句,大写 |
| a | 上午下午 | 后或事前子句,小写 |
显示
format
根据参数显示格式化后的字符串,参数产考上面的表格
不传参时,显示为ISO_8601格式,无毫秒
1 | moment('2012-12-13').format('YYYY-MM-DD HH:mm:ss') // 2012-12-13 00:00:00 |
diff
对比差值
1 | moment('2012-12-13').diff(moment('2012-12-12')) // -86400000 |
第二个参数如下
| 键 | 简写 |
|---|---|
| years | y |
| months | M |
| weeks | w |
| days | d |
| hours | h |
| minutes | m |
| seconds | s |
| milliseconds | ms |
valueOf
显示毫秒数值
1 | moment('2012-12-13').valueOf() //1355328000000 |
unix
显示秒数值
1 | moment('2012-12-13').unix() // 1355328000 |
daysInMonth
当月多少天
1 | moment('2012-02').daysInMonth() // 29 |
设置
1 | moment('2012-12-12').format('YYYY-MM-DD HH:mm:ss') // "2012-12-12 00:00:00" |
还可以
1 | moment('2012-12-12').set('date', 2) |
获取
1 | moment('2012-12-12').get('year'); |
操作
1 | moment('2012-12-12').add(7, 'days').subtract(1, 'months').format('YYYY-MM-DD HH:mm:ss') // "2012-11-19 00:00:00" |
moment对象是可变的,操作后原本对象内的值就会变化,例如我们要显示前后3天的值
1 | const cur = moment('2012-12-12') |
开始结束时间
1 | // 开始 |
注意:开始时间和结束,小时以上,均为12:00,结束时间均为23:59:59:999
查询
1 | // 小于 |
可用dayjs替代
- 🕒 和 Moment.js 相同的 API 和用法
- 💪 不可变数据 (Immutable)
- 🔥 支持链式操作 (Chainable)
- 🌐 国际化 I18n
- 📦 仅 2kb 大小的微型库
- 👫 全浏览器兼容