js-moment v3.1.1
轻量级日期操作工具类 js-moment。
✨ 特性
- 轻量:gzip 大小不足3kb
- 精简:剔除 moment.js、day.js等日期组件的冗余方法,注重常用方法及开放性,暴露更多接口来支持各种场景
- 易用:完善的ts参数及方法提示,让您不查看文档也可玩转 js-moment
- 通用:包含通用的日期处理方法,包括日期加减、格式化、相对时间等常用方法
🖥 支持环境
现代浏览器和 IE9 及以上。
node
📦 安装
> npm install --save js-moment // esm
import moment form 'js-moment';
// commonjs
const moment = require('js-moment');🔨 示例
const t = '2019-10-31 12:00:01';
moment(t).format('YYYY-MM-dd'); // 2019-10-31
moment(t).format(); // 2019-10-31 12:00:01
moment(t).format('YYYY年MM月dd日') ; // 2019年10月31日
moment(t).format('YYYY-MM-dd 星期W AA h:m:s'); // 2019-10-31 星期四 下午 12:0:1
moment(t).format('MMMMDD'); // 十月三十一日
moment(t).format('MMMM.DD.WW', 'en'); // October.31st.Thu
moment(t).format('MMM dd, YYYY', 'en'); // Oct 31, 2019 const t = '2019-10-31 12:00:01';
moment(t).addYear(1); // Moment {date: Sat Oct 31 2020 12:00:01 GMT+0800 (中国标准时间), dateObject: {…}}
moment(t).addYear(1).format(); // 2020-10-31 12:00:01
moment(t).addMonth(1).format(); // 2019-12-01 12:00:01
moment(t).add(1).format(); // 2019-11-01 12:00:01
moment(t).addDay(1).format(); // 2019-11-01 12:00:01
moment(t).addTime(1).format(); // 2019-10-31 13:00:01
moment(t).addTime(1, 'h').format(); // 2019-10-31 13:00:01
moment(t).addTime(1, 'm').format(); // 2019-10-31 12:01:01
moment(t).addTime(1, 's').format(); // 2019-10-31 12:00:02默认方法
例:
moment('2021-01-20 12:00:01').fromTo('2022-02-19 10:19:50').format(); // '1年后'
moment('2021-02-20 12:00:01').fromTo('2022-02-19 10:19:50').format(); // '11个月29天后'
moment('2022-01-20 12:00:01').fromTo('2022-01-13 10:19:50').format(); // '7天1小时前'
moment('2022-01-20 12:00:01').fromTo('2022-01-20 10:19:50').format(); // '1小时40分钟前'
moment('2022-01-20 12:00:01').fromTo('2022-01-20 12:19:50').format(); // '19分钟49秒后'自定义格式
moment('2021-01-20 12:00:01').fromTo('2022-02-19: 11:19:50').format('y年M个月d天'); // '1年0个月12天'
moment('2021-01-20 12:00:01').fromTo('2022-02-19: 11:19:50').format('y年M个月d天h小时m分钟s秒'); // '1年0个月12天7小时11分钟18秒'自定义拼接
注意:为方便使用,极大的提高方法的灵活性,本方法将所有时间参数均暴露出来,方法
Moment.fromTo()返回分别包含(进制后)的日期时间数及total对象,total对象中存放对应的日期间隔总数参考对比,在自定义拼接时需要两者配合使用,如下示例
const { tag, years, months, days, hours, minutes, seconds, total } = moment(t).fromTo('2018-09-01 08:30:00');
`发布于${total.months}个月${days}天${tag === '-' ? '之前' : '以后'}` // 发布于14个月5天之前
`距离高考还有:${total.days}天${hours}小时${minutes}分钟${seconds}秒` // 距离高考还有:425天 3小时 30分钟 1秒
`闹钟将于${total.hours}小时${minutes}分钟${seconds}秒后响起` // 闹钟将于3小时30分钟30秒后响起参数及使用说明
moment()会返回一个Moment实例对象, 包含以下方法及属性;
Moment属性
| 属性名 | 说明 |
|---|---|
date | 标准 Date 对象 |
dateObject | year: 年 month:月 0-11 day:日hours:时 0-23) minutes:分 seconds:秒 time:时间戳 week:星期 0-6 quarter: 季度 0-3 |
Moment.dateObject- year: number 年
- month: number 月 0-11
- day: number 日 1-31
- hours: number 时 0-23
- minutes: number 分 0-60
- seconds: number 秒 0-60
- time: number 时间戳
- week: number 星期 0-6
- quarter: number 季度 0-3
Moment方法
| 方法名 | 参数类型 | 必填 | 默认值 | 方法说明 | 版本 |
|---|---|---|---|---|---|
format(str) | string | N | 'YYYY-MM-DD hh:mm:ss' | 格式化时间, 方法说明 | v1.0.0 |
format(str, locale) | str: stringlocale: 'zh'\|'en' | N | str: 'yyyy-MM-dd hh:mm:ss'locale: 'zh' | 格式化时间, 方法说明 | v3.0.0 |
add(count, type) | count: numbertype: string | N | count: 0type: 'day' | 日期时间计算方法, 方法说明 | v3.0.0 |
addTime(count, type) | count: number type: 'h' \| 'm' \| 's' | N | count: 0type: 'h' | 时间加减 h: 小时数 m: 分钟数 s: 秒数 | v1.0.0 |
addDate(count, type) | count: number type: 'd' \| 'm' \| 'y' | N | count: 0type: 'd' | 日期加减 y: 年数 m: 月数 d: 天数 | v3.0.0 |
addDay(count) | count: number | N | count: 0 | 天数加减 | v1.0.0 |
addWeek(count) | count: number | N | count: 0 | 星期加减 | v1.0.0 |
addMonth(count) | count: number | N | count: 0 | 月份加减 | v1.0.0 |
addYear(count) | count: number | N | count: 0 | 年份加减 | v1.0.0 |
getDays() | - | N | - | 获取当前月包含天数 | v3.0.0 |
getTime() | - | N | - | 获取时间戳 | v1.0.0 |
fromTo() | string\|Date | N | new Date()当前时间 | 获得相对时间, 方法说明 | v2.1.0 |
clone() | - | N | - | 复制当前 Moment 对象 | v3.0.0 |
方法说明
1. format()
| 含义 | 字符 | 格式 | 版本 |
|---|---|---|---|
| 年 | YYYY\|Y\|yyyy\|y | 0000 - 9999 | v1.0.0 |
YY\|yy | 00 - 99 | v1.0.0 | |
| 月 | MMMM | 一月 - 十二月 (zh) January - December (en) | v3.0.0 |
MMM | 1月 - 12月 (zh) Jan - Dec (en) | v3.0.0 | |
MM | 01 - 12 | v1.0.0 | |
M | 1 - 12 | v1.0.0 | |
| 日 | DD | 一日 - 三十一日 (zh)1st - 31st (en) | v3.0.0 |
D | 1日 - 31日 (zh)1 - 31 (en) | v3.0.0 | |
dd | 00 - 31 | v1.0.0 | |
d | 1 - 31 | v1.0.0 | |
| 时 | HH | 00 - 23 | v3.0.0 |
H | 0 - 23 | v3.0.0 | |
hh | 00 - 12 | v1.0.0 | |
h | 0 - 12 | v1.0.0 | |
| 分 | mm | 00 - 59 | v1.0.0 |
m | 0 - 59 | v1.0.0 | |
| 秒 | ss | 00 - 59 | v1.0.0 |
s | 0 - 59 | v1.0.0 | |
| 子午线 | AA | 上午 / 下午 | v2.2.0 |
A | AM / PM | v2.2.0 | |
a | am / pm | v2.2.0 | |
| 星期 | WWW | 星期日、星期一 ... 星期六 (zh)Sunday、 Monday ... Saturday (en) | v3.0.0 |
WW | 周日、周一 ... 周六 (zh)Sun、Mon ... Sat (en) | v3.0.0 | |
W | 日、一 ... 六 (zh)Su、Mo ... Sa (en) | v3.0.0 | |
w | 0 - 6 | v2.2.0 | |
| 季度 | QQ | 春、夏、秋、冬 (zh) spring、summer、autumn、winter (en) | v3.0.0 |
Q | 一、二、三、四 | v2.2.0 | |
q | 1 - 4 | v2.2.0 |
2. fromTo()
获取当前
Moment对象与传入日期的差值moment(date).formTo(date)
入参
标准日期格式字符串(如 yyyy-MM-dd hh:mm:ss)|Date对象返回值
属性名 说明 版本 tag标记时间的前后,'-'表示之前;'+'表示之后 v2.1.0 years相差的年月日时分秒中的年数(进制后) v2.1.0 months同上,相差月数 v2.1.0 days同上,相差天数 v2.1.0 hours同上,相差小时数 v2.1.0 minutes同上,相差分钟数 v2.1.0 seconds同上,相差秒数 v2.1.0 quarters同上,相差的季度数 v3.0.0 weeks同上,相差的周数 v3.0.0 o总计相差的时间,包含年月日时分秒的集合(v3.0.0以后移除)v2.1.0total总计相差的时间,包含年月日时分秒的集合,向下取整 v3.0.0 wholeTotal总计相差的时间,包含年月日时分秒的集合,包含小数(精确值) v3.0.0 format()格式化日期差方法 方法说明 v2.1.0
2.1
fromTo().format().total与fromTo().format().years、fromTo().format().months ...等对比fromTo().format().total日期时间总数,向下取整fromTo().format().years、fromTo().format().months ...分别包含 年、月、日...
属性名 说明 示例对应值 total.years包含总年数 1 format().years分别包含年数 1 total.months包含总月数 23 format().months分别包含月数 11 total.days包含总天数 702 format().days分别包含天数 2 total.hours包含总小时数 16858 format().hours分别包含小时数 10 total.minutes包含总分钟数 1011529 format().minutes分别包含分钟数 49 total.seconds包含总秒数 60691770 format().seconds分别包含秒数 30 total.quarters包含总季度数 7 format().quarters包含季度数 7 total.weeks包含总周数量 100 format().weeks包含总周数量 100 示例:
moment('2022-11-12 12:00:04').fromTo('2020-12-10 1:10:34')2.2
fromTo().format()方法名 参数类型 默认值 版本 方法说明 返回值 format String Null v2.1.0 格式化相对日期 根据日期差自动生成,默认取两位 示例:
moment('2021-02-20 12:00:01').fromTo('2022-02-19 10:19:50').format(); // '11个月29天后'format 入参格式字符
含义 年 月 日 时 分 秒 字符 y M d h m s 示例:
moment('2021-01-20 12:00:01').fromTo('2022-02-19: 11:19:50').format('y年M个月d天'); // '1年0个月12天'详情可参考 方法示例
3. add()
日期时间计算方法
入参
参数 说明 必填 默认值 count 计算数量 number N 0 type 计量单位 string 'year'\|'month'\|'day'\|'hour'\|'minute'\|'second'N 'day'返回值
Moment对象
更新日志
v3.1.1
支持 UTC (yyyy-MM-dd'T'HH:mm:ss.SSSZ) 转为标准北京时间。v3.1.0
切换 Rollup.js 进行代码打包,支持 ES Module CommonJs 两种方式引入。v3.0.0
- 添加
typescript语法校验提示,在ts项目中会自动提示相关参数及说明; - 更新
format()方法,新增中英文区分(zh | en),新增 月份MMMM、MMM、星期WWW、WW)等格式化规则,需要注意,在v3.0.0以后,'DD'表示大写日期,即'一月 - 十二月,小写日期用'dd'表示参考format方法说明; - 重构
formTo()方法,v3.0.0以前月份采用固定的30天来计算,v3.0.0以后则以自然月进行计算; - 新增
add()方法,参考add()方法说明; Moment对象新增time时间戳、week星期、quarter季度等字段;- 修复其他已知bug;
- 添加
v2.2.1
切换到webpack5.0进行代码编译,切换ts进行开发;- v2.2.0
增加format格式化方法的季度、星期等格式,详情见参数说明; - v2.1.0
增加fromTo方法,用于获取相对时间, 详情见参数说明↑; - v2.0.0
- 增加方法的链式调用,
moment().addDay()等方法将会返回当前的Moment对象,如moment(t).addDay(1).addMonth(1).format(); - 修复ios设备格式化时间显示
NAN的bug;
- 增加方法的链式调用,
- v1.0.0
基本的
moment方法, 返回Moment对象,进行日期的计算及格式化等操作;
🔗 链接
🤝 参与共建
- author zhangjicheng
- Email zhangjichengcc@163.com
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago