2011-11-24 93 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); 
}