我有这个小谜语,我想解决它是在困扰我这是谜语:
1900年1月1日是星期一。三十天有九月,四月,六月和十一月。所有其他人都有三十一人,仅拯救二月,其中二十八,风雨无阻。在闰年,二十九岁。闰年发生在任何一年可被4整除,但除非可被400整除,否则不会在一个世纪。在二十世纪的第一个月(1901年1月1日至2000年12月31日),有多少个星期日下降了?
我已经完成的代码:
var sundays = 0;
for (var year = 1901; year <= 2000; year++) {
for (var month = 1; month <= 12; month++) {
}
}
我需要什么:
我不确定if的定义是什么来解决这个问题?
谢谢,请帮帮我。
答案 0 :(得分:3)
最简单的方法是创建一个Date
对象,然后查看它是否是一个星期天:
new Date(year, month, 1).getDay() == 0 // Sunday is 0
但是,JavaScript月份为0-11,而不是1-12,因此您需要修复循环(或在month - 1
构造函数中使用Date
)。
答案 1 :(得分:0)
您可以创建一个Date对象并增加年份和月份:
var from=new Date(),
m= 0,
y= 1901,
A= [];
while(y<2001){
if(m== 11){
m= 0;
++y;
}
from.setFullYear(y,m++,1);
if(from.getDay()=== 0) A.push(from.toLocaleDateString());
}
A.length+' Sundays begin months between 1901 and 2000.\n'+
A.join('; ');
/ *返回值:
156个星期日从1901年到2000年之间开始。
1901年9月1日; 1902年6月1日; 1903年2月1日; 1903年3月1日; 1903年11月1日; 1904年5月1日; 1905年1月1日; 1905年10月1日; 1906年4月1日; 1906年7月1日; 1907年9月1日; 1908年3月1日; 1908年11月1日; 1909年8月1日; 1910年5月1日; 1911年1月1日; 1911年10月1日; 1912年9月1日; 1913年6月1日; 1914年2月1日; 1914年3月1日; 1914年11月1日; 1915年8月1日; 1916年10月1日; 1917年4月1日; 1917年7月1日; 1918年9月1日; 1919年6月1日; 1920年2月1日; 1920年8月1日; 1921年5月1日; 1922年1月1日; 1922年10月1日; 1923年4月1日; 1923年7月1日; 1924年6月1日; 1925年2月1日; 1925年3月1日; 1925年11月1日; 1926年8月1日; 1927年5月1日; 1928年1月1日; 1928年4月1日; 1928年7月1日; 1929年9月1日; 1930年6月1日; 1931年2月1日; 1931年3月1日; 1931年11月1日; 1932年5月1日; 1933年1月1日; 1933年10月1日; 1934年4月1日; 1934年7月1日; 1935年9月1日; 1936年3月1日; 1936年11月1日; 1937年8月1日; 1938年5月1日; 1939年1月1日; 1939年10月1日; 1940年9月1日; 1941年6月1日; 1942年2月1日; 1942年3月2日; 1942年11月2日; 1943年8月1日; 1944年10月1日; 1945年4月1日; 1945年7月1日; 1946年9月1日; 1947年6月1日; 1948年2月1日; 1948年8月1日; 1949年5月1日; 1950年1月1日; 1950年10月1日; 1951年4月1日; 1951年7月1日; 1952年6月1日; 1953年2月1日; 1953年3月1日; 1953年11月1日; 1954年8月1日; 1955年5月1日; 1956年1月1日; 1956年4月1日; 1956年7月1日; 1957年9月1日; 1958年6月1日; 1959年2月1日; 1959年3月1日; 1959年11月1日; 1960年5月1日; 1961年1月1日; 1961年10月1日; 1962年4月1日; 1962年7月1日; 1963年9月1日; 1964年3月1日; 1964年11月1日; 1965年8月1日; 1966年5月1日; 1967年1月1日; 1967年10月1日; 1968年9月1日; 1969年6月1日; 1970年2月1日; 1970年3月1日; 1970年11月1日; 1971年8月1日; 1972年10月1日; 1973年4月1日; 1973年7月1日; 1974年9月1日; 1975年6月1日; 1976年2月1日; 1976年8月1日; 1977年5月1日; 1978年1月1日; 1978年10月1日; 1979年4月1日; 1979年7月1日; 1980年6月1日; 1981年2月1日; 1981年3月1日; 1981年11月1日; 1982年8月1日; 1983年5月1日; 1984年1月1日; 1984年4月1日; 1984年7月1日; 1985年9月1日; 1986年6月1日; 1987年2月1日; 1987年3月1日; 1987年11月1日; 1988年5月1日; 1989年1月1日; 1989年10月1日; 1990年4月1日; 1990年7月1日; 1991年9月1日; 1992年3月1日; 1992年11月1日; 1993年8月1日; 1994年5月1日; 1995年1月1日; 1995年10月1日; 1996年9月1日; 1997年6月1日; 1998年2月1日; 1998年3月1日; 1998年11月1日; 1999年8月1日; 2000年10月1日
* /
答案 2 :(得分:-1)
到目前为止,您的代码还可以,但现在每个月都需要查看当月的哪一天。您可以使用Date
个对象来实现此目的。
var sundays = 0;
for (var year = 1901; year<2001; year++) {
for (var month = 1; month<=12; month++) {
if (new Date(year, month-1, 1).getDay() == 0) {
sundays++;
}
}
}
正如@Amadan指出的那样,getDay在星期日返回0。