gpt4 book ai didi

javascript - 编写一个 JavaScript 程序来计算闰年

转载 作者:行者123 更新时间:2023-11-30 08:32:10 25 4
gpt4 key购买 nike

我正在编写一个 JavaScript 程序,它接受用户输入的日期并确定给定日期是星期几。我能够让程序接受日期。我使用调试语句来打印日、月、年和世纪的值,以确保程序正确获取这些值,到目前为止都是如此。

我还有一个名为 totalNumDays 的调试变量,它存储每个月的天数,因为该值不同。 (一月有 31 天,四月有 30 天,二月有 28 或 29 天)。我遇到的问题是让 2 月的数字正确。

我所做的是创建一个包含 31 天所有月份的数组:

//1 = January, 3 = March, 5 = May,..., etc.
var monthNumsWith31 = [1, 3, 5, 7, 8, 10, 12];

然后我稍后使用 for 循环迭代以确定天数。我在这里尝试了几种不同的方法。我认为最有意义的是:

for(var i = 0; i < monthNumsWith31.length; i++)
{
if(month == monthNumsWith31[i])
{
totalNumDays = 31;
}
else
{
if(month == 2 && isLeapYear() == true)
{
totalNumDays = 29;
}
else if(month == 2 && isLeapYear() == false)
{
totalNumDays = 28;
}
else
{
totalNumDays = 30;
}
}

我尝试了一大堆不同的东西,但似乎无法让它存储二月的正确天数。我什至尝试创建第二个 monthNumsWith30 数组,并使用两个不同的 for 循环遍历这两个数组,并为 30 天和 31 天的月份设置适当的天数。我认为问题可能出在我的 isLeapYear() 函数中。下面是 isLeapYear() 的代码。请注意,year 是全局的,因此该函数确实可以访问它。

function isLeapYear() {
if(year % 4 == 0)
{
if(year % 100 == 0)
{
if(year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
else
{
return false;
}
}

我试着按照公式来确定一年是否是闰年。公式可以在这里看到:https://gyazo.com/9e4b7fb92014d1e27315807c188fd5e0

有谁知道为什么我的函数没有执行它应该执行的操作?谢谢。

更新我现在让它正常工作,以计算每个月的正确天数。但是,我遇到了另一个问题。

为了找出给定日期发生在一周中的哪一天,我使用了 Zeller's Congruence。我使用的特定公式是 ((26M - 2)/10 + D + Y + Y/4 + C/4 + 5C) MOD 7 其中 M, DY 正是它们看起来的样子,C 是世纪(年份的前两位数字)。算法的一部分说明

IF Month < 3 THEN
Year = Year - 1
Month = Month + 10
ELSE
Month = Month - 2
END IF

我的所有工作似乎都正常进行。我输入了许多调试语句以确保它获得正确的值,但由于某种原因计算机错误地评估了表达式。

此算法将给出 0 到 6 之间的数字。0 表示星期日,1 表示星期一,等等。例如,日期为 2/15/16。这个日期发生在星期一。 2016 年 2 月 15 日,星期一。

在我的程序中有以下代码

var weekdayIndex = (Math.floor((26 * monthVal) - 2 / 10) + dayVal + 
yearVal + Math.floor(yearVal / 4) + Math.floor(centuryVal / 4) +
(5 * centuryVal)) % 7;

当这个表达式运行时,它应该等于 1,但由于某些原因它等于 0。我手工计算并一遍又一遍地评估每个单独的表达式并不断得到 1。手动执行此操作,我得到的数字是 (31 + 15 + 15 + 3 + 5 + 20) % 7。当我将这个表达式直接放入计算机时(没有所有变量名和 Math.floor 表达式,只有数字)它正确地获取了值。我不知道为什么当我使用变量名和表达式时它是不正确的。有什么想法吗?

最佳答案

你的功能没问题,除了一个简单的事情:你缺少年份参数!

function isLeapYear(year) {
return year % 4 == 0 &&
(year % 100 !== 0 || year % 400 === 0);
}

但是,您的扩展语法也可以:

function isLeapYear(year) {
if(year % 4 == 0)
{
if(year % 100 == 0)
{
if(year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
else
{
return false;
}
}

isLeapYear(1900) 产生 false,正如预期的那样,2000 true、1996 true、1997

对我来说似乎是合法的。

关于javascript - 编写一个 JavaScript 程序来计算闰年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com