Skip to content

使用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