引言
在 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?