2015-01-07 59 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日

*/