Moment.js 日期处理实战:时间偏移、格式化与常用方法详解

作者:清欢时间:2026-10-30 21:57:13浏览:200

本文详细介绍 Moment.js 在日期处理中的应用。涵盖使用 subtract、startOf 和 endOf 获取上周、上月及前三个月的时间范围;解析 YYYY、MM 等格式化令牌;演示 day()、week() 和 month() 方法获取星期、周数及月份索引,并提供封装获取完整日期信息的实用函数示例。

借助 Moment.js 库,我们可以便捷地计算并获取过去时间段(如上周、上月及前三个月)的起始与结束时间点。以下提供具体的代码实现示例。

具体代码示例如下:

计算上周起始与结束时间的代码:

const startOfLastWeek = moment().subtract(1, 'weeks').startOf('week');
const endOfLastWeek = moment().subtract(1, 'weeks').endOf('week');

计算上月起始与结束时间的代码:

const startOfLastMonth = moment().subtract(1, 'months').startOf('month');
const endOfLastMonth = moment().subtract(1, 'months').endOf('month');

计算三个月前起始与结束时间的代码:

const startOfThreeMonthsAgo = moment().subtract(3, 'months').startOf('month');
const endOfThreeMonthsAgo = moment().subtract(1, 'months').endOf('month');

上述示例中,核心逻辑依赖于 Moment.js 提供的 subtract 方法以减去指定的时间单位,随后结合 startOf 与 endOf 方法分别截取时间段的开始与结束。开发者可根据实际需求灵活调整时间间隔或精度,例如针对月份进行更细致的起止时间获取。

在运行上述代码前,请确保项目中已正确引入 Moment.js 库文件,且相关 API 方法处于可用状态。

日期格式化令牌说明

Moment.js 支持多种令牌用于自定义年份、月份和日期的输出格式。以下是常用令牌列表:

  • YYYY:代表4位数的年份,例如输出 2023
  • YY:代表2位数的年份,例如输出 23
  • MMMM:代表完整的英文月份名称,例如输出 July
  • MMM:代表缩写的英文月份名称,例如输出 Jul
  • MM:代表2位数的月份数字,例如输出 07
  • M:代表1位或2位数的月份数字,例如输出 7
  • DD:代表2位数的日期数字,例如输出 15
  • D:代表1位或2位数的日期数字,例如输出 15

在 Moment.js 中,利用上述令牌即可实现日期的自定义格式化输出。具体用法如下示例所示:

const date = moment();
const formattedYear = date.format('YYYY'); // 2023
const formattedMonth = date.format('MMMM'); // July
const formattedDate = date.format('DD'); // 15

该示例展示了如何调用 Moment.js 的 format 方法,将日期对象转换为指定格式的字符串。通过传入对应的格式化令牌,可以灵活获取年份、月份或日期的不同展示形式。

用户可根据具体业务需求选择合适的令牌进行日期格式化。Moment.js 还提供了丰富的其他令牌及格式化选项,建议进一步查阅文档以探索更多可能性。

day() 方法解析

在 Moment.js 中,day() 方法用于获取日期对应的星期几。该方法返回一个整数,其中 0 代表星期日,1 代表星期一,依此类推,直到 6 代表星期六。

以下是调用 day() 方法的具体示例:

const date = moment('2023-07-15');
const dayOfWeek = date.day();
console.log(dayOfWeek); // 输出:6

在示例中,我们首先使用 Moment.js 创建了一个日期对象,随后调用 day() 方法获取该日期对应的星期索引,并将结果赋值给 dayOfWeek 变量。最后,通过控制台打印 dayOfWeek 变量,输出结果为 6,表明该日期为星期六。

开发者可根据需要调用 day() 方法获取星期索引,并据此进行后续逻辑处理。需注意,day() 方法返回的是基于 0 的索引值(周日为 0,周一为 1)。若需获取星期几的文本名称而非数字索引,可结合 Moment.js 的 format() 方法及相应的格式化令牌来实现。

week() 方法解析

在 Moment.js 中,week() 方法用于获取日期所在年份的周数。该方法返回一个整数,表示该日期处于所在年份的第几周。

以下是调用 week() 方法的具体示例:

const date = moment('2023-07-15');
const weekOfYear = date.week();
console.log(weekOfYear); // 输出:28

在示例中,我们创建了一个日期对象,接着调用 week() 方法获取该日期在年份中的周数,并将结果存入 weekOfYear 变量。最后,打印 weekOfYear 变量,输出结果为 28,表示该日期位于当年的第 28 周。

需要特别注意的是,week() 方法默认遵循 ISO 周历标准进行计算,即每周从星期一开始,且一年中的第一周必须包含该年的星期四。若需采用其他周历标准,可通过 Moment.js 的 isoWeek() 或 week() 方法的第二个参数进行指定。

开发者可根据业务需求调用 week() 方法获取周数,并依据返回的整数值执行相应的处理逻辑。

month() 方法解析

在 Moment.js 中,month() 方法用于获取日期所在的月份。该方法返回一个整数,其中 0 代表一月,1 代表二月,依此类推,11 代表十二月。

以下是调用 month() 方法的具体示例:

const date = moment('2023-07-15');
const month = date.month();
console.log(month); // 输出:6

在示例中,我们创建了一个日期对象,随后调用 month() 方法获取该日期的月份索引,并将结果赋值给 month 变量。最后,打印 month 变量,输出结果为 6,表明该日期处于七月(索引 6 对应七月)。

需注意,month() 方法返回的是基于 0 的索引值,即一月对应 0,二月对应 1,以此类推。若需获取月份的文本名称而非数字索引,可结合 Moment.js 的 format() 方法及相应的格式化令牌来实现。

开发者可根据需要调用 month() 方法获取月份索引,并依据返回的整数值进行后续处理。

封装综合日期信息获取方法

为了简化开发,我们可以封装一个统一的方法来获取各类日期信息。以下是一个参考实现:

function getDateInfo(date) {
  const momentDate = moment(date);
  return {
    year: momentDate.year(),
    month: momentDate.month() + 1,
    day: momentDate.date(),
    dayOfWeek: momentDate.day(),
    weekOfYear: momentDate.week(),
    hour: momentDate.hour(),
    minute: momentDate.minute(),
    second: momentDate.second(),
  };
}
// 使用示例
const date = '2023-07-15';
const dateInfo = getDateInfo(date);
console.log(dateInfo);

在示例中,我们定义了一个名为 getDateInfo 的函数,该函数接收一个日期字符串作为输入参数。在函数内部,利用 Moment.js 将输入的字符串转换为 Moment 对象,并依次调用相关方法提取年份、月份、日期、星期几、所在年份的周数以及小时、分钟和秒等信息。最终,将这些信息封装为一个对象并返回。

调用 getDateInfo 方法时,需传入一个日期字符串以获取对应的日期详情。在示例中,我们传入了 '2023-07-15',并将返回的日期信息对象存储在 dateInfo 变量中,随后在控制台打印该对象以查看结果。

请注意,上述代码仅为示例,开发者可根据实际项目需求进行修改或功能扩展。

至此,关于 Moment.js 的详细使用说明已介绍完毕。如需了解更多相关使用技巧,欢迎查阅本站往期文章或继续浏览后续内容,感谢大家的支持!

作者最新文章