如何在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
相关产品推荐
相关产品推荐

