当然, 使用Moment.js中的库是确定特定日期是星期几的最佳选择, 我们不建议你采用其他方式。但是, 出于教育目的, 尤其是在大学里, 你将需要执行教授的任务, 以确定特定日期(过去和现在)的星期几。解决这一问题的最简单的编程解决方案是通过Zeller的一致性。
泽勒(Zeller)的全等方法可以算出一年中任何一天的星期几。最常见的是用于查找你的出生日期(可以根据上面的旧押韵确定你的性格)。
在这篇简短的文章中, 我们将向你解释如何轻松实现以及如何理解JavaScript的Zeller公式。
Zeller同等的JavaScript实现
在Zeller公式中, 月份从三月开始, 因此:
- 三月= 1,
- 四月= 2
- 五月= 3
- 依此类推…直到
- 12月= 10,
- 一月= 11
- 2月= 12
- 因此, 对于1990年6月8日, M = 6
令日数= D, 月数= M年=Y。如果M为1或2, 则将M加12, 然后从Y减去1。令C为Y的前两位, K为Y的最后两位。 。将(2.6M-5.39), (K / 4)和(C / 4)的整数部分加在一起。将这个D和K相加, 然后减去2C。 (数字的整数部分是整数部分:2.3的整数部分是2, 而6.7的整数部分是6。请注意, –1.7的整数部分是–2。这可以通过JavaScript的Math.floor函数完成。 )。
当该数字除以7时, 找到余数。如果该余数为0, 则天为星期天, 1为星期一, 2为星期二, 依此类推。此逻辑在JavaScript中的实现如下:
/**
* Function that implements the zellers congruence and returns according to the result the day of the week.
*
* @param D {Int} Number of the day (0-31)
* @param M {Int} Number of the month (1-12)
* @param Y {Year} Whole year e.g 2001
*/
function Zeller(D, M, Y){
var Day = "";
if (M < 3)
{
M = M + 12;
Y = Y - 1;
}
var C = Math.floor(Y / 100);
var K = Y - (100 * C);
var S = Math.floor(2.6 * M - 5.39) + Math.floor(K / 4) + Math.floor(C / 4) + D + K - (2 * C);
var ans = S - (7 * Math.floor(S / 7));
if (ans == 0)
{
Day = "Sunday";
}
else if (ans == 1)
{
Day = "Monday";
}
else if (ans == 2)
{
Day = "Tuesday";
}
else if (ans == 3)
{
Day = "Wednesday";
}
else if (ans == 4)
{
Day = "Thursday";
}
else if (ans == 5)
{
Day = "Friday";
}
else
{
Day = "Saturday";
}
return Day;
}
我们的zeller函数将返回一个字符串, 该字符串返回与日期对应的星期几, 例如:
// Thursday
Zeller(19, 11, 2020);
// Tuesday
Zeller(14, 05, 2019);
// Wednesday
Zeller(5, 2, 1670);
// .. and so on
编码愉快!
评论前必须登录!
注册