
本文介绍如何利用 luxon 库精准计算当前日期所在“十年”的起始日(即该十年的首年1月1日),并通过简洁可靠的代码实现自动推算。
本文介绍如何利用 luxon 库精准计算当前日期所在“十年”的起始日(即该十年的首年1月1日),并通过简洁可靠的代码实现自动推算。
在时间处理中,“十年”(decade)通常指连续的10年周期,例如 2020–2029 年为一个标准十年,其起始日为 2020年1月1日。Luxon 本身未内置 startOfDecade() 方法(区别于 startOfYear() 或 startOfMonth()),但可通过数学运算轻松推导:只需将当前年份对10取模后相减,即可得到该十年的起始年份。
以下是一段完整、可直接运行的示例代码:
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/3.4.4/luxon.min.js" integrity="sha512-dUlSLLkxslGILhPdCkALwk4szPhp3xmZIKFtlUD+O9Lslq41Aksmdt5OGqpomDoT4FsCUH70jQU8ezZHI3v1RQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const { DateTime } = luxon;
const now = DateTime.local();
// 计算当前十年的起始年份(向下舍入到最近的整十数,如 2023 → 2020)
const firstYearOfDecade = now.year - (now.year % 10);
// 构造该十年第一天:YYYY-01-01(时区默认本地)
const firstDayOfDecade = DateTime.local(firstYearOfDecade, 1, 1);
console.log(`当前十年起始日:${firstDayOfDecade.toISODate()}(${firstDayOfDecade.weekdayLong})`);
// 示例输出:2020-01-01(Wednesday)
});
</script>✅ 注意事项:
- 此方法采用「年份向下取整到10的倍数」逻辑(即
2020–2029十年),符合国际通用惯例;若需2021–2030等“世纪式十年”,可改为Math.floor((now.year - 1) / 10) * 10 + 1。 -
DateTime.local()确保结果基于用户本地时区;如需 UTC 时间,请改用DateTime.utc()并同步调整构造参数。 - Luxon 的
toISODate()返回标准 ISO 格式(YYYY-MM-DD),适合展示或进一步解析。
? 小结:虽然 Luxon 暂未封装 decade 级操作,但借助其强大的 DateTime 构造能力和清晰的不可变设计,一行核心计算(year - (year % 10))即可稳健获得十年起点——简洁、可读、无依赖,是时间维度扩展的典型实践范例。

















