Moment.js 已进入维护模式,官方团队也建议新项目改用更现代的库。Day.js 的 API 与它几乎一致,体积只有约 2 KB,所以这里的每个部分都同时给出 Day.js 的等价写法。
点击格式符即可插入到格式字符串中。示例使用上方的参考日期和语言区域。
| 格式符 | 示例 | 含义 | |
|---|---|---|---|
| 年与季度 | |||
| 四位年份 | |||
| 两位年份 | |||
| 季度(1–4) | |||
| 季度(序数) | |||
| 月 | |||
| 月(1–12) | |||
| 月(序数) | |||
| 月(两位) | |||
| 月份简称 | |||
| 月份全称 | |||
| 日(月内 / 年内) | |||
| 日 | |||
| 日(序数) | |||
| 日(两位) | |||
| 一年中的第几天 | |||
| 一年中的第几天(三位) | |||
| 星期 | |||
| 星期几(0 为周日) | |||
| 星期(最短) | |||
| 星期(简称) | |||
| 星期(全称) | |||
| 星期几(按语言区域) | |||
| ISO 星期几(1 为周一) | |||
| 周 | |||
| 一年中的第几周(按语言区域) | |||
| 第几周(序数) | |||
| 第几周(两位) | |||
| ISO 周数 | |||
| ISO 周数(两位) | |||
| 周所属年份(按语言区域) | |||
| ISO 周所属年份 | |||
| 小时 | |||
| 小时,0–23 | |||
| 小时,00–23 | |||
| 小时,1–12 | |||
| 小时,01–12 | |||
| 小时,1–24 | |||
| 小时,01–24 | |||
| 分与秒 | |||
| 分钟 | |||
| 分钟(两位) | |||
| 秒 | |||
| 秒(两位) | |||
| 十分之一秒 | |||
| 百分之一秒 | |||
| 毫秒 | |||
| 上午 / 下午 | |||
| AM / PM(上午 / 下午) | |||
| am / pm(小写) | |||
| 时区 | |||
| UTC 偏移,±HH:mm | |||
| UTC 偏移,±HHmm | |||
| 需要 moment-timezone | 时区缩写 | ||
| 需要 moment-timezone | 时区名称 | ||
| Unix 时间 | |||
| Unix 秒 | |||
| Unix 毫秒 | |||
| 本地化格式 | |||
| 本地化时间 | |||
| 本地化时间(含秒) | |||
| 本地化数字日期 | |||
| 本地化日期(含月份名) | |||
| 本地化日期和时间 | |||
| 本地化日期、星期和时间 | |||
| 简短数字日期 | |||
| 简短日期(含月份名) | |||
| 简短日期和时间 | |||
| 简短日期、星期和时间 | |||
| 转义 | |||
| 方括号中的文字原样输出 | |||
留空则按 ISO 8601 解析。
每一行先把参考日期平移,再用 from() 和 calendar() 描述它相对参考日期的位置。
| 平移 | from(ref) | calendar(ref) |
|---|---|---|
| .add(-45, 'second') | ||
| .add(-10, 'minute') | ||
| .add(-3, 'hour') | ||
| .add(-1, 'day') | ||
| .add(-5, 'day') | ||
| .add(-3, 'month') | ||
| .add(-2, 'year') | ||
| .add(30, 'minute') | ||
| .add(2, 'day') | ||
| .add(1, 'month') |
日常任务的写法和实时结果。点击“试一试”可载入到下方的代码运行器。
| 任务 | Moment.js |
|---|---|
格式化当前时间 | moment().format('YYYY-MM-DD HH:mm:ss')→ |
加上若干天 | moment('2023-01-01').add(1, 'days').format('YYYY-MM-DD')→ |
距现在多久 | moment().subtract(7, 'days').fromNow()→ |
本月第一天 | moment().startOf('month').format('YYYY-MM-DD')→ |
今年最后一天 | moment().endOf('year').format('YYYY-MM-DD')→ |
本周开始(随语言区域) | moment().startOf('week').format('YYYY-MM-DD ddd')→ |
两个日期相差的天数 | moment().diff(moment('2022-01-01'), 'days')→ |
本月天数 | moment().daysInMonth()→ |
所在季度 | moment().quarter()→ |
日历式时间 | moment().add(1, 'days').calendar()→ |
是否在两个日期之间 | moment('2024-12-31').isBetween('2024-01-01', '2025-01-01')→ |
是否为今天 | moment().isSame(moment(), 'day')→ |
是否为闰年 | moment('2024-01-01').isLeapYear()→ |
严格校验日期 | moment('2023-02-30', 'YYYY-MM-DD', true).isValid()→ |
解析自定义格式 | moment('13/10/2026 14:30', 'DD/MM/YYYY HH:mm').format()→ |
Unix 时间戳(秒) | moment().unix()→ |
当前 UTC 时间 | moment.utc().format()→ |
其他时区的时间 | 需要 moment-timezone |
把时长转成自然语言 | moment.duration(90, 'minutes').humanize()→ |
月末加一个月 | moment('2026-01-31').add(1, 'months').format('YYYY-MM-DD')→ |
调用 add() 但不重新赋值 | (() => { const d = moment('2026-01-01'); d.add(1, 'days'); return d.format('YYYY-MM-DD') })()→ |
输入一个使用 moment 的表达式,直接在浏览器中运行;常用写法里用到的插件都已启用,并使用上方选择的语言区域。
在线调试 Moment.js 的格式化、解析、相对时间和时长,每个 Moment 结果旁边都同时给出 Day.js 的结果,并标出不一致的地方,方便在迁移代码前确认会有哪些变化。两个库都在浏览器中运行。
设置「参考日期和时间」和「语言区域」;代码里用的是 moment.utc() 就打开「按 UTC 处理」。
在「格式字符串」里输入格式,「输出」会显示 Moment 的结果以及 Day.js 的结果,并标注「输出一致」或「输出不同」。
在「格式符速查」里查看 Day.js 不支持或需要插件的格式符,点击格式符可插入到格式里。
在「解析演练」「相对时间」「时长」中对比两个库,Day.js 结果不同的地方会高亮显示。
在「常用写法」里查看日常任务的两种写法,点「试一试」在「代码运行器」中运行 Moment 版本。
Moment.js 已进入维护模式,官方团队也建议新项目改用更现代的库。页面顶部的提示里有 Moment 项目状态说明和 Day.js 演练场的链接。
最常见的是可变性:Moment 的 add() 会修改原对象,而 Day.js 每次都返回新对象,必须把结果重新赋值。另外很多功能在 Day.js 里需要插件,每条常用写法都列出了所需插件。
Qo、Mo、DDD、DDDD、e、E、S 和 SS。「格式符速查」会把它们标为 Day.js 不支持,其余格式符则标出需要的插件。
时区名称需要单独的 moment-timezone 扩展,本页没有加载它,所以速查表显示“需要 moment-timezone”。Day.js 则通过 timezone 插件支持。
Moment.js 和 Day.js 的具体版本号显示在设置面板下方。
不会。两个库和语言包都加载到当前页面中,你输入的内容都在浏览器里执行。