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

如何通过Luxon获取十年的初始迹象及第一天?

关于Luxon处理十年起始的问题解答

一、判断某个时间是否为十年的初始(即是否是某十年的第一天)

要判断一个Luxon DateTime对象是否是某十年的第一天,可通过以下逻辑实现:

  1. 先计算该时间所在十年的第一天
  2. 对比原时间与这个起始时间是否一致(若只需精确到天,用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方法与年份计算逻辑即可实现:

  1. 计算十年的起始年份(如2023年对应的起始年份为Math.floor(2023/10)*10 = 2020)
  2. 将时间设置为起始年份的年初,即为该十年的第一天

示例代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:52:39