使用JavaScript找到日期对应的年份、周数、月份或季度
JavaScript的Date
API缺乏许多处理日期的方法,这就是为什么第三方日期库如此受欢迎的原因。然而,不使用库也可以轻松实现找到日期对应的年份、周数、月份或季度等操作。
[!NOTE]
您可能不熟悉JavaScript的数字分隔符,它在下面的示例中使用。它们是使大型数字值更易读的语法糖。
年份的天数
从Date
对象中找到一年中的天数(范围为1-366
)相对简单。我们可以使用Date
构造函数和Date.prototype.getFullYear()
将一年的第一天作为Date
对象获取。
然后,我们可以将给定的date
减去一年的第一天,并除以每天的毫秒数得到结果。最后,我们可以使用Math.floor()
将得到的天数四舍五入为整数。
const dayOfYear = date =>
Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 86_400_000);
dayOfYear(new Date('2024-09-28')); // 272
年份的周数
计算一年中的周数也是从计算一年的第一天开始作为Date
对象。然后,我们可以使用Date.prototype.setDate()
、Date.prototype.getDate()
和Date.prototype.getDay()
以及取模(%
)运算符来获取一年的第一个星期一。
最后,我们可以从给定的date
中减去一年中的第一个星期一,然后除以一周的毫秒数。我们可以使用Math.round()
来获得与给定的date
对应的以零为基准的一年中的周数。如果给定的date
在一年中的第一个星期一之前,则返回负零(-0
)。
const weekOfYear = date => {
const startOfYear = new Date(date.getFullYear(), 0, 1);
startOfYear.setDate(startOfYear.getDate() + (startOfYear.getDay() % 7));
return Math.round((date - startOfYear) / 604_800_000);
};
weekOfYear(new Date('2021-06-18')); // 23
一年中的月份
从Date
对象中找到一年中的月份(范围为1-12
)是最简单的。只需使用Date.prototype.getMonth()
来获取当前月份(范围为0-11
),然后加上1
将其映射到范围1-12
。
const monthOfYear = date => date.getMonth() + 1;
monthOfYear(new Date('2024-09-28')); // 9
一年中的季度
从Date
中找到一年中的季度(范围为1-4
)也很简单。在获取当前月份后,我们可以使用Math.ceil()
将月份除以3
来获得当前季度。
const quarterOfYear = date => Math.ceil((date.getMonth() + 1) / 3);
quarterOfYear(new Date('2024-09-28')); // 3