You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Luxon中设置日期为指定月份的最后一个周一?

在Luxon中获取某月最后一个指定工作日(以五月最后一个周一为例)

要获取五月的最后一个周一(阵亡将士纪念日),你之前用的DateTime.now().set({ month: 5, weekday: 1 })默认会返回当月第一个周一,要实现“最后一个”的需求,Luxon提供了简洁的方式,不需要提前知道具体日期:

方法一:通过月底回退获取(推荐)

先将日期定位到当月最后一天,再调整到最近的周一,Luxon会自动回退到当月内的最后一个符合条件的工作日:

import { DateTime } from 'luxon';

// 获取当前年份五月的最后一个周一
const memorialDay = DateTime.now()
  .set({ month: 5 })
  .endOf('month')
  .set({ weekday: 1 }); // 1代表周一,Luxon中weekday范围为1(周一)到7(周日)

方法二:通过周数调整(备选)

先获取当月第一个周一,再加4周,若超出当月则减一周:

import { DateTime } from 'luxon';

let memorialDay = DateTime.now()
  .set({ month: 5, weekday: 1 })
  .plus({ weeks: 4 });

// 若加4周后月份不再是五月,说明当月最后一个周一在第4周
if (memorialDay.month !== 5) {
  memorialDay = memorialDay.minus({ weeks: 1 });
}

关键说明

  • Luxon的weekday参数规则:1对应周一,7对应周日,和部分日期库的周日为1的规则不同,使用时注意区分。
  • 方法一无需额外判断,逻辑更简洁可靠,适用于所有需要获取“某月最后一个指定工作日”的场景。

内容的提问来源于stack exchange,提问作者Joe Jankowiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:06