MomentJS - Getter/Setter 方法
现代日期/时间:Moment.js 中的获取器与设置器
Section titled “现代日期/时间:Moment.js 中的获取器与设置器”Moment.js 提供了方便的方法来获取(get)和修改(set)Moment 对象中特定的时间单位(如年、月、小时等)。
可变性警告: Moment.js 设置器一个重要的特性是它们会**修改(mutate)**原始的 Moment 对象。如果处理不当,这可能会导致意外的副作用。如果需要保留原始的 moment 对象,请始终考虑在修改之前进行克隆(.clone())。
常用获取器和设置器
Section titled “常用获取器和设置器”大多数时间单位都有对应的获取器和设置器方法,通常有单数和复数别名:
| 单位 | 获取器语法 | 设置器语法 |
|---|---|---|
| 毫秒 | moment().millisecond() 或 .milliseconds() | moment().millisecond(Number) 或 .milliseconds(Number) (0-999) |
| 秒 | moment().second() 或 .seconds() | moment().second(Number) 或 .seconds(Number) (0-59) |
| 分钟 | moment().minute() 或 .minutes() | moment().minute(Number) 或 .minutes(Number) (0-59) |
| 小时 | moment().hour() 或 .hours() | moment().hour(Number) 或 .hours(Number) (0-23) |
| 月份中的日期 | moment().date() 或 .dates() | moment().date(Number) 或 .dates(Number) (1-31) |
| 星期几 | moment().day() 或 .days() (与区域设置相关,0=周日,6=周六) | moment().day(Number|String) 或 .days(Number|String) (0-6 或区域设置下的星期名称) |
| ISO 标准星期几 | moment().isoWeekday() (1=周一,7=周日) | moment().isoWeekday(Number) (1-7) |
| 一年中的第几天 | moment().dayOfYear() | moment().dayOfYear(Number) (1-366) |
| 一年中的第几周 | moment().week() 或 .weeks() (与区域设置相关) | moment().week(Number) 或 .weeks(Number) |
| ISO 标准一年中的第几周 | moment().isoWeek() 或 .isoWeeks() | moment().isoWeek(Number) 或 .isoWeeks(Number) |
| 月份 | moment().month() (0-11,0=一月) | moment().month(Number|String) (0-11 或区域设置下的月份名称) |
| 季度 | moment().quarter() 或 .quarters() (1-4) | moment().quarter(Number) 或 .quarters(Number) (1-4) |
| 年 | moment().year() 或 .years() | moment().year(Number) 或 .years(Number) |
| 周年 | moment().weekYear() (与区域设置相关) | moment().weekYear(Number) |
| ISO 标准周年 | moment().isoWeekYear() | moment().isoWeekYear(Number) |
| 一年中的总周数 | moment().weeksInYear() (与区域设置相关) | 不适用 |
| ISO 标准一年中的总周数 | moment().isoWeeksInYear() | 不适用 |
通用获取/设置方法
Section titled “通用获取/设置方法”Moment.js 还提供了通用的 get 和 set 方法:
moment().get(String):使用字符串键获取单位值(例如,moment().get('year'),moment().get('month'))。注意:“month”是基于 0 的索引。moment().set(String, Int):使用字符串键设置单个单位(例如,moment().set('hour', 13))。moment().set(Object):使用对象一次设置多个单位(例如,moment().set({ year: 2024, month: 0, date: 1 }))。请记住这里的 month 也是基于 0 的索引!
示例:使用获取器和设置器(配合克隆)
Section titled “示例:使用获取器和设置器(配合克隆)”const now = moment();console.log('Original:', now.format('YYYY-MM-DD HH:mm:ss'));
// Get the current hourconst currentHour = now.hour();console.log('Current Hour:', currentHour);
// --- Mutating Example (Use with care!) ---// const modifiedDirectly = now.year(2025);// console.log('Original (MUTATED!):', now.format('YYYY-MM-DD HH:mm:ss'));// console.log('Modified Directly:', modifiedDirectly.format('YYYY-MM-DD HH:mm:ss'));
// --- Safer Example using clone() ---const safeModified = now.clone().year(2025).month(0); // Set year to 2025, month to January
console.log('Original (Safe):', now.format('YYYY-MM-DD HH:mm:ss')); // Unchangedconsole.log('Safely Modified:', safeModified.format('YYYY-MM-DD HH:mm:ss'));
// Using generic setconst startOfDay = moment().clone().set({ hour: 0, minute: 0, second: 0, millisecond: 0 });console.log('Start of Today:', startOfDay.format('YYYY-MM-DD HH:mm:ss.SSS'));查找最大/最小 Moment 对象
Section titled “查找最大/最小 Moment 对象”Moment.js 可以轻松地从列表中找到最早或最晚的 moment 对象:
moment.max(Moment[, Moment...])或moment.max(Moment[]):返回提供的参数或数组中最晚的 Moment 对象。moment.min(Moment[, Moment...])或moment.min(Moment[]):返回提供的参数或数组中最早的 Moment 对象。
const date1 = moment('2023-10-26');const date2 = moment('2023-11-15');const date3 = moment('2023-10-01');
const latestDate = moment.max(date1, date2, date3);const earliestDate = moment.min([date1, date2, date3]);
console.log('Latest:', latestDate.format('YYYY-MM-DD')); // 输出: Latest: 2023-11-15console.log('Earliest:', earliestDate.format('YYYY-MM-DD')); // 输出: Earliest: 2023-10-01获取器和设置器是与 Moment 对象交互的基础,但使用设置器时务必注意其可变性。
更多详情请参阅文档:https://momentjs.com/docs/#/get-set/