- 轻量: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实例对象, 包含以下方法及属性;
| 属性名 | 说明 |
|---|---|
date |
标准 Date 对象 |
dateObject |
year: 年 month:月 0-11day:日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
| 方法名 | 参数类型 | 必填 | 默认值 | 方法说明 | 版本 |
|---|---|---|---|---|---|
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 |
| 含义 | 字符 | 格式 | 版本 |
|---|---|---|---|
| 年 | 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 |
获取当前
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')
-
方法名 参数类型 默认值 版本 方法说明 返回值 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天'
详情可参考 方法示例
日期时间计算方法
-
入参
参数 说明 必填 默认值 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