- Moment.js 通过简洁而强大的 API 简化了 JavaScript 中的日期和时间管理。
- 允许您以任何格式和时区分析、操作、验证和显示日期。
- 它可以轻松集成到项目中,并与 IronPDF 等外部插件和库兼容。

对于 Web 开发人员来说,在 JavaScript 中处理日期和时间可能是一项真正的挑战。幸运的是,像 Moment.js 这样的工具可以显著简化这一过程,让从基本的日期格式化到复杂的日期操作和验证都变得更加轻松。如果您曾经因为在项目中转换、比较或正确显示日期而感到沮丧,那么 Moment.js 很可能就是您的得力助手,或者至少您应该考虑使用它。
本文将详细介绍 Moment.js 的方方面面:从其主要功能和鲜为人知的技巧,到实际示例以及与其他库的集成,包括对其语法和可用任务的清晰解释。我们还将探讨其局限性、最新更新,以及如果您正在寻找更现代的替代方案,有哪些选择。
Moment.js 是什么?为什么它如此受欢迎?
Moment.js 是一个 JavaScript 库,旨在让日期和时间的处理变得轻松便捷。它允许您使用简洁而强大的语法,创建、解析、操作和显示几乎任何格式的日期。多年来,该库一直是社区克服 JavaScript 原生 Date() 对象局限性的主要解决方案。
Moment.js 的核心是`moment()`对象,它几乎可以根据任何有效输入构建日期:文本字符串、Date 对象、时间戳,甚至直接使用数值参数。这使得它极其灵活,适用于各种项目,从小型脚本到管理国际时区或历史记录的企业级应用程序。
它为何如此成功?在于其可靠性、易用性以及丰富的配套工具和插件。即使项目已进入维护模式,Moment.js 仍然拥有庞大的用户群和详尽的文档,巩固了其作为 JavaScript 和 Node.js 领域领先数据解决方案的地位。
Moment.js 的主要功能和优势
- 简单直观的 APIMoment.js 最大的优势之一是其清晰的语法。您只需几行代码即可执行简单的操作,例如获取当前日期或将字符串转换为特定格式,或者执行复杂的计算和验证。
- 灵活的解析和格式化解析几乎任何格式的日期字符串并将其转换为所需的输出从未如此简单。 Moment.js 可以快速轻松地在自定义演示文稿中格式化日期。.
- 日期操作:添加或减去天、月、年、周或任何其他时间单位就像使用方法一样简单 加() y 减去()当您需要处理相对日期、截止日期或动态变化的时间范围时,这非常有用。
- 稳健验证:如果您需要检查某个日期是否有效或是否存在(例如,30 月 XNUMX 日),Moment.js 可以帮您轻松搞定。方法 已验证() 它能够检测日期格式或逻辑中的细微错误。
- 支持时区和本地化: 感谢你的插件 时刻时区在不同时区之间转换日期非常容易。您还可以根据用户的语言和区域惯例显示日期,这在全球应用程序中至关重要。
- 插件生态系统:除了主库之外,还有一个插件生态系统来扩展其功能(日历、与其他框架的兼容性、奇异的格式......)。
如何在你的项目中开始使用 Moment.js
安装非常简单。您只需一行代码即可在 HTML 中引入 Moment.js:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
如果您使用的是 Node.js 或现代开发环境,通常使用 npm 或 yarn 进行安装:
npm install moment
完成后,您可以根据使用的语法导入 Moment.js:
// Versión CommonJS
var moment = require('moment');
moment().format();
// ES6
import moment from 'moment';
moment().format();
创建日期:不同的方式和实际示例
轻松创建日期
要获取当前日期和时间, 只需使用 moment():
console.log(moment()); // Devuelve la fecha actual en formato ISO8601
您可以通过传递参数来构造特定的日期:
moment("2022-10-14"); // Crea el 14 de octubre de 2022
您也可以从给定的字符串和格式开始,即使在严格模式下:
moment("25/12/1995", "DD/MM/YYYY", true); // Analiza y comprueba el formato
您有原生的 Date 对象吗?
const fechaJS = new Date();
const miFecha = moment(fechaJS);
格式化和显示日期
Moment.js允许您以任何可以想象的格式显示日期。例如,要以日/月/年的形式显示当前日期:
moment().format('DD/MM/YYYY');
如果你想要更人性化的链条,你可以使用:
moment().format('MMMM Do YYYY, h:mm:ss a'); // Ejemplo: "marzo 8º 2024, 3:21:10 pm"
一些有用的格式化标记:
YYYY:4 位数年份MM:我的DD:月份中的日期hhoHH:时间(12小时或24小时格式)mm: 分钟ss:秒a:上午/下午
例如,仅显示时间:
moment().format('HH:mm:ss');
带有标记和区域支持的高级格式
Moment.js 支持多种本地化格式和翻译。可以即时切换语言,以另一种语言显示月份和日期名称。
moment.locale('es'); // Cambia a español
document.write(moment().format('LLLL'));
// Ejemplo: martes, 8 de marzo de 2024 15:21
日期操作:加法、减法和比较
处理相对日期是 Moment.js 的优势之一。
- 添加天数、月份或年份:
moment().add(3, 'days').format('DD/MM/YYYY'); - 减去单位:
moment().subtract(2, 'months').format('DD/MM/YYYY'); - 期间开始和结束:
moment().startOf('month').format('DD/MM/YYYY'); // Primer día del mes moment().endOf('month').format('DD/MM/YYYY'); // Último día del mes
验证日期并检测错误
在操作日期之前,务必验证其正确性:
moment('2024-02-30', 'YYYY-MM-DD').isValid(); // false, el 30 de febrero no existe
这样可以防止从用户接收日期的应用程序中出现意外错误。
日期比较:检查某个日期是否在其他日期之中
Moment.js 包含几种比较日期的方法:
- 是之前():检查一个日期是否在另一个日期之前。
- 之后():检查日期是否较晚。
- isBetween():表示日期是否介于两个给定日期之间。
let hoy = moment();
let ayer = moment().subtract(1, 'days');
console.log(hoy.isAfter(ayer)); // true
处理时区和国际日期
与世界各地用户合作时,时区问题可能非常棘手。有了moment-timezone插件,您可以轻松地在不同地区之间转换日期。
const moment = require('moment-timezone');
const fechaUTC = moment('2024-05-25');
const fechaNY = fechaUTC.tz('America/New_York').format('YYYY-MM-DD HH:mm:ss');
console.log(fechaNY);
// Ejemplo: "2024-05-24 20:00:00"
此外,Moment.js 能够显示根据用户区域设置调整后的日期,正确显示翻译后的月份和日期名称。
主要使用示例和高级技巧
获取日期之间的差异
您可以用不同的单位计算两个日期之间经过的时间:
let inicio = moment('2024-01-01');
let fin = moment('2024-03-08');
let dias = fin.diff(inicio, 'days'); // Devuelve el número de días entre ambas
相对日期和人类时间
Moment.js 非常适合显示“3 天前”或“5 小时后”之类的消息:
moment().subtract(3, 'days').fromNow(); // "hace 3 días"
moment().add(2, 'hours').fromNow(); // "en 2 horas"
人类历法
calendar ()函数显示相对日期,例如“昨天下午 17:00”、“明天上午 9:00”,使其非常适合用于日历应用程序。
moment().subtract(1, 'days').calendar(); // "Ayer a las..."
moment().add(3, 'days').calendar(); // "Próximo martes a las..."
支持年份跳跃和特殊日子
您想知道某一年是否是闰年吗?
moment([2024]).isLeapYear(); // true
isLeapYear()方法可以直接给出答案。
高级定制:格式、标记和严格解析
Moment.js允许您使用自定义字符串和标记来创建或读取各种格式的日期。此外,严格模式要求完全匹配,从而避免了不易察觉的错误和意外情况。
例如,要解析“日/月/年”格式的日期:
moment('12/03/2023', 'DD/MM/YYYY', true);
常见标记列表和示例
- 年:YYYY (2024), YY (24), Y (-500)
- 月:MM(01 – 12)、MMM(一月)、MMMM(一月)
- 天:DD(01 – 31),C(1日 – 31日)
- 时间:HH(00 – 23)、hh(01 – 12)、mm(分钟)、ss(秒)
- 时区:Z,ZZ
这些代币可以组合使用,以创建完全自定义的输出。请参阅文档,了解完整列表和特殊情况。