moment.js

2024-06-21 21:32:26 88
Moment.js 是一个功能强大的 JavaScript 日期和时间处理库,用于解析、验证、操作和显示日期和时间。它在处理日期和时间方面提供了丰富的功能,使得开发者可以方便地进行各种复杂的操作。

安装

使用 npm 安装

npm install moment

使用 CDN

<script src="https://cdn.jsdelivr.net/npm/moment@2.29.1/moment.min.js"></script>

基本用法

创建日期对象

当前时间

const moment = require('moment');
let now = moment();
console.log(now.format());

指定日期

let specificDate = moment('2024-06-15');
console.log(specificDate.format());

使用日期和时间

let dateTime = moment('2024-06-15T13:45:00');
console.log(dateTime.format('YYYY-MM-DD HH:mm:ss'));

格式化日期

Moment.js 提供了灵活的日期格式化功能。

let now = moment();

// 默认格式
console.log(now.format()); // "2024-06-15T13:45:00+00:00"

// 自定义格式
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // "2024-06-15 13:45:00"

// 更多格式化示例
console.log(now.format('dddd, MMMM Do YYYY, h:mm:ss a')); // "Saturday, June 15th 2024, 1:45:00 pm"
console.log(now.format('ddd, hA')); // "Sat, 1PM"

解析日期

Moment.js 能够解析多种日期格式。

let dateString = '2024-06-15';
let date = moment(dateString, 'YYYY-MM-DD');
console.log(date.format('MMMM Do YYYY')); // "June 15th 2024"

多格式解析

let date1 = moment('15-06-2024', ['DD-MM-YYYY', 'YYYY-MM-DD']);
console.log(date1.format('YYYY-MM-DD')); // "2024-06-15"

let date2 = moment('20240615', 'YYYYMMDD');
console.log(date2.format('YYYY-MM-DD')); // "2024-06-15"

操作日期

Moment.js 提供了多种方法来操作日期和时间。

增加时间

let now = moment();
let future = now.add(7, 'days');
console.log(future.format('YYYY-MM-DD')); // 当前日期 + 7 天

减少时间

let past = now.subtract(1, 'month');
console.log(past.format('YYYY-MM-DD')); // 当前日期 - 1 个月

复杂操作

let complexOperation = now.add(3, 'years').subtract(2, 'months').add(10, 'days');
console.log(complexOperation.format('YYYY-MM-DD')); // 当前日期 + 3 年 - 2 个月 + 10 天

显示相对时间

相对时间显示是 Moment.js 的一大特色。

let pastDate = moment('2024-01-01');
console.log(pastDate.fromNow()); // "5 months ago"

let futureDate = moment('2025-01-01');
console.log(futureDate.toNow()); // "in 7 months"

自定义相对时间

let customPastDate = moment('2024-01-01');
console.log(customPastDate.fromNow(true)); // "5 months"

let customFutureDate = moment('2025-01-01');
console.log(customFutureDate.toNow(true)); // "7 months"

验证日期

Moment.js 可以用于验证日期是否合法。

let isValid = moment('2024-13-01', 'YYYY-MM-DD', true).isValid();
console.log(isValid); // false

isValid = moment('2024-12-01', 'YYYY-MM-DD', true).isValid();
console.log(isValid); // true

获取和设置日期各部分

Moment.js 提供了简单的方法来获取和设置日期的各个部分。

获取日期各部分

let now = moment();
console.log(now.year()); // 获取年份
console.log(now.month()); // 获取月份(0-11)
console.log(now.date()); // 获取日期
console.log(now.hour()); // 获取小时
console.log(now.minute()); // 获取分钟
console.log(now.second()); // 获取秒

设置日期各部分

now.year(2025);
now.month(0); // 一月
now.date(1);
now.hour(0);
now.minute(0);
now.second(0);
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // "2025-01-01 00:00:00"

时区处理

时区处理需要 moment-timezone 插件。

安装 moment-timezone

npm install moment-timezone

使用时区

const moment = require('moment-timezone');

let now = moment.tz('America/New_York');
console.log(now.format('YYYY-MM-DD HH:mm:ss')); // "2024-06-15 09:45:00"

let londonTime = now.tz('Europe/London');
console.log(londonTime.format('YYYY-MM-DD HH:mm:ss')); // "2024-06-15 14:45:00"

日期差异计算

Moment.js 可以轻松计算两个日期之间的差异。

let start = moment('2024-01-01');
let end = moment('2024-12-31');

let diffDays = end.diff(start, 'days');
console.log(diffDays); // 364

let diffMonths = end.diff(start, 'months');
console.log(diffMonths); // 11

let diffYears = end.diff(start, 'years');
console.log(diffYears); // 0

链式调用

Moment.js 支持链式调用,使得日期操作更为简洁。

let result = moment().add(10, 'days').subtract(2, 'months').startOf('day');
console.log(result.format('YYYY-MM-DD HH:mm:ss'));

插件与扩展

Moment.js 提供了许多插件来扩展其功能:

  1. moment-timezone:处理时区。
  2. moment-range:用于处理日期范围。
  3. moment-duration-format:用于格式化时间段。

安装插件

npm install moment-range moment-duration-format

使用插件

moment-range

const { extendMoment } = require('moment-range');
const moment = extendMoment(require('moment'));

let start = moment('2024-01-01');
let end = moment('2024-12-31');
let range = moment.range(start, end);

console.log(range.contains(moment('2024-06-15'))); // true

moment-duration-format

const moment = require('moment');
require('moment-duration-format');

let duration = moment.duration(123, 'minutes');
console.log(duration.format('h:mm')); // "2:03"

官方文档和社区资源

官方文档

  1. Moment.js 官方网站

    • 官方网站提供了详细的使用指南、API 文档和示例代码,是了解 Moment.js 的最佳资源。
  2. Moment.js GitHub 仓库

    • GitHub 仓库包含了 Moment.js 的源代码、贡献指南和问题追踪。你可以在这里提交问题、查找解决方案或参与开发。
  3. Moment.js API 文档

    • 官方 API 文档详细描述了 Moment.js 的所有功能和用法,包括创建、操作、格式化和解析日期的方法。

社区资源

  1. Stack Overflow

    • Stack Overflow 是一个大型问答社区,包含了许多关于 Moment.js 的问题和答案。你可以在这里查找解决方案或提出自己的问题。
  2. Moment.js Discussions

    • GitHub Discussions 是 Moment.js 项目下的讨论区,用户可以在这里讨论使用中的问题、提出新特性建议或分享使用经验。
  3. Moment.js 中文文档

    • 由社区翻译的 Moment.js 中文文档,适合中文用户阅读和参考。
  4. Awesome Moment.js

    • Awesome Moment.js 是一个汇集了许多关于 Moment.js 的资源、插件和教程的精选列表,适合希望深入了解和扩展 Moment.js 功能的用户。

常见问题

  1. Moment.js FAQ
    • 官方常见问题页面,解答了使用 Moment.js 时的一些常见问题和疑惑。