如何通过Luxon获取十年的初始迹象及第一天?
关于Luxon处理十年起始的问题解答
一、判断某个时间是否为十年的初始(即是否是某十年的第一天)
要判断一个Luxon DateTime对象是否是某十年的第一天,可通过以下逻辑实现:
- 先计算该时间所在十年的第一天
- 对比原时间与这个起始时间是否一致(若只需精确到天,用
hasSame方法即可)
示例代码:
const { DateTime } = require('luxon'); function isStartOfDecade(date) { // 获取当前时间所在十年的第一天 const decadeStart = date.startOf('year').set({ year: Math.floor(date.year / 10) * 10 }); // 对比是否为十年起始日 return date.hasSame(decadeStart, 'day'); } // 测试用例 const testDate1 = DateTime.fromISO('2020-01-01'); console.log(isStartOfDecade(testDate1)); // 返回 true const testDate2 = DateTime.fromISO('2023-05-15'); console.log(isStartOfDecade(testDate2)); // 返回 false
二、获取指定时间所在十年的第一天
结合Luxon的startOf方法与年份计算逻辑即可实现:
- 计算十年的起始年份(如2023年对应的起始年份为
Math.floor(2023/10)*10 = 2020) - 将时间设置为起始年份的年初,即为该十年的第一天
示例代码:
const { DateTime } = require('luxon'); function getDecadeStart(date) { const startYear = Math.floor(date.year / 10) * 10; return date.set({ year: startYear }).startOf('year'); } // 测试用例 const currentDate = DateTime.now(); console.log(getDecadeStart(currentDate).toISODate()); // 若当前为2023年,输出 2020-01-01 const specificDate = DateTime.fromISO('2015-08-20'); console.log(getDecadeStart(specificDate).toISODate()); // 输出 2010-01-01
如果需要以2021-2030这类十年区间(起始年份为xx1),只需调整起始年份的计算逻辑:
function getDecadeStartAlt(date) { const startYear = Math.floor((date.year - 1)/10)*10 + 1; return date.set({ year: startYear }).startOf('year'); } console.log(getDecadeStartAlt(DateTime.fromISO('2020-01-01')).toISODate()); // 输出 2011-01-01 console.log(getDecadeStartAlt(DateTime.fromISO('2021-01-01')).toISODate()); // 输出 2021-01-01
内容的提问来源于stack exchange,提问作者Enickkey
相关产品推荐
相关产品推荐

