2015-01-07 126 views
3

我有这个小谜语,我想解决它是窃听我这是谜语:在JavaScript中计算星期日

1900年1月1日是星期一。九月,四月,六月和十一月有三十天。其余的都有三十一个,单独保存二月,有二十八个,有雨或者有光。闰年,二十九岁。闰年发生在任何一年可被4整除的年份,但除非它能被400整除,否则不会在一个世纪内完成。在20世纪(1901年1月1日至2000年12月31日)这个月的第一个月的第一个月有多少个星期日下降?

代码中,我已经这样做了FAR:

var sundays = 0; 
    for (var year = 1901; year <= 2000; year++) { 
    for (var month = 1; month <= 12; month++) { 

    } 
} 

我需要什么:

我不知道该如果statment会是怎样解决呢?

谢谢,请帮助我。

+0

我会说这是还需要知道(我相信谷歌搜索后,这是一个星期二)什么的一周1901年1月1日是中日 – aug

+0

似乎是HTTP的副本: //stackoverflow.com/questions/27809723/counting-sundays-in-javascript。 –

回答

3

最简单的方法是使Date对象,然后看它是否是一个星期天:

new Date(year, month, 1).getDay() == 0 // Sunday is 0 

然而,JavaScript的月份是0-11,1-12没有,所以你需要修复你的循环(或在Date构造函数中使用month - 1)。

-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。

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年间月。

9/1/1901; 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日

*/