在 JavaScript 中查找年份范围内的 1 月 1 日是星期日?

引言

在 JavaScript 中,查找某个年份范围内的 1 月 1 日是星期几,一直都是一个比较经典的问题。本文将介绍一些解决该问题的方法。下面将逐一讲解。

方法一:计算

计算方式

通过计算可以得出某个年份的 1 月 1 日是星期几。具体计算方式如下:

function getDayOfWeek(year) {

var d = new Date(year, 0, 1);

return d.getDay();

}

console.log(getDayOfWeek(1990)); // 1: 星期一

上述代码中,我们通过 JavaScript 中的 Date() 对象,创建一个指向某个年份 1 月 1 日的对象,再通过 getDay() 方法获取星期几。

方法二:枚举

枚举方式

通过枚举可以得出一段年份范围内所有 1 月 1 日是星期几的结果。具体步骤如下:

获取起始年份和结束年份,用 for 循环遍历每一年;

创建一个表示当年 1 月 1 日的 Date 对象,用 getDay() 方法获取当年 1 月 1 日是星期几;

将星期几的结果保存到数组中。

function getDaysOfWeek(start, end) {

var dayOfWeeks = [];

for (var year = start; year <= end; year++) {

var d = new Date(year, 0, 1);

var dayOfWeek = d.getDay();

dayOfWeeks.push(dayOfWeek);

}

return dayOfWeeks;

}

console.log(getDaysOfWeek(1990, 1995)); // [1, 0, 1, 2, 3, 4]

上述代码中,我们通过 getDayOfWeeks() 方法获取了 1990 年到 1995 年每年 1 月 1 日是星期几的结果并保存到数组中。

方法三:公式

公式介绍

通过公式可以快速计算一段年份范围内的所有 1 月 1 日是星期几的结果。具体步骤如下:

获取起始年份和结束年份,并计算出年份数量;

根据公式,计算出1899年12月30日是星期几;

通过计算,得出所需年份的所有1月1日是星期几。

公式如下:

d=(d+year+parseInt(year/4)-parseInt(year/100)+parseInt(year/400))%7

其中,d 为1899年12月30日是星期几,year 为需要计算的年份。

公式实现

function getDayOfWeeksByFormula(start, end) {

var dayOfWeeks = [];

var d = 1;

for (var year = start; year <= end; year++) {

d = (d + year + parseInt(year / 4) - parseInt(year / 100) + parseInt(year / 400)) % 7;

dayOfWeeks.push(d);

}

return dayOfWeeks;

}

console.log(getDayOfWeeksByFormula(1990, 1995)); // [1, 0, 1, 2, 3, 4]

结论

以上三种方法,都可以实现查找某个年份范围内的 1 月 1 日是星期几。其中,计算、枚举和公式三种方法各有优缺点:计算方法简单易用,但易受本地时间偏差的干扰;枚举方法结果准确,但需要遍历每年的 1 月 1 日,计算量较大;公式方法计算量最小,但需要了解相关数学知识和公式推导过程。在实际应用中,选择哪种方法需要根据具体情况而定。

参考资料

JavaScript Date.getDay(): 0=sunday, 6=saturday. how to get 1=monday, 7=sunday.

How do I get the number of days between two dates in JavaScript?

Determination of the day of the week - Wikipedia