2011-11-24 132 views
-2

我通常不使用JavaScript,也看不出爲什麼這不起作用。謝謝。這個JavaScript函數有什麼問題?

function testYear() { 
    var dObject = new Date(); 
    var dRegEx = /^[0-9][0-9]00$/; 
    var d = dObject.getFullYear(); 

    if (d.match(dRegEx) && d % 400 == 0) { 
    alert("The year "+d+" is in fact a leap year!"); 
    //return true; 
    } 
    else if(!(d.match(dRegEx) && d % 400) && d % 4 == 0) { 
    alert("The year "+d+" is in fact a leap year!"); 
    //return true; 
    } 
    else { 
    alert("The year "+d+" is not a leap year."); 
    //return false; 
    } 
} 
+0

此外,我不知道如果正則表達式是正確的。從未使用過它們。 –

+0

當我的網頁上點擊一個按鈕時,我希望看到今年是閏年的警報;但是,沒有任何反應。 –

+0

發佈按鈕代碼。 – Brandon

回答

3

這裏沒有必要使用正則表達式。只需使用一個普通的整數運算,看看這一年是整除100:

if (d % 100 === 0 && ...) 

順便說一句,如果d % 400 === 0那麼它是自動不錯,d % 100 === 0所以額外的測試是不必要的。


一年是在公曆leap year無論它是否被400整除,或者如果它是被4整除,但不能被100試試這個:

if ((d % 400 === 0) || (d % 4 === 0 && d % 100 !== 0)) 
{ 
    // is leap year 
} 
3

如果你想對正則表達式全年匹配,它應該是一個字符串:

var d = ''+dObject.getFullYear(); 

例如。

1

d是數。你需要它是一個字符串來使用match方法。投它作爲一個字符串最簡單的方法是爲空字符串添加到它:

var d = dObject.getFullYear() + ''; 

順便說一句,你應該看看了怎麼看你的JavaScript控制檯,因爲相關的誤差將在此記錄。這將大大幫助您追蹤問題,或者至少確定問題所在。

1

忘記正則表達式,這裏只是錯誤的方法。當你的整個功能可以被(幾乎)一個班輪代替時,我不會被困擾到確切地說錯了什麼,但d是一個數字,所以你不能使用match()。你不需要測試它是否可以被整除100 整除 - 後者意味着前者。

function testYear() { 
    var year = (new Date()).getFullYear(); 

    if (year % 400 === 0 || (year % 4 === 0 && year % 100 != 0)) { 
     alert("The year " + year + " is in fact a leap year!"); 
     //return true; 
    } else { 
     alert("The year "+year+" is not a leap year."); 
     //return false; 
    } 

    // OR, if you don't need the alerts and only care about the 
    // return value you can just do this: 
    return year % 400 === 0 || (year % 4 === 0 && year % 100 != 0); 
}