1

您将如何更有效地进行编程?

if( randomYear%4==0 ) { 
    if( randomYear%100==0 ) {
        if( randomYear%400==0 ) {
            randomDay = 1 + Math.floor(Math.random()*29);
        }
        else {
            randomDay = 1 + Math.floor(Math.random()*28);
        }
    else{
        randomDay = 1 + Math.floor(Math.random()*29);
    }
else{
    randomDay = 1 + Math.floor(Math.random()*28);
}

首先,我使用的是 math.floor,因为它包含 0 并且不包含 1,这正是我正在寻找的。这样做的目的是确定变量 'randomYear' 是否是闰年并且在二月有适当的日子。

我主要关心所有 if 和 else 语句。顺便说一句,我正在使用 Javascript。太感谢了!!

4

4 回答 4

5

你甚至不需要数学:

var tmp = new Date(year,1,29); // attempt to get February 29th
isleapyear = (tmp.getMonth() == 1);
于 2013-06-02T02:15:43.470 回答
1

如果您可以包含第三方库,请尝试使用此库:

http://momentjs.com/

你可以这样做:

moment([2000]).isLeapYear() 

检查 2000 年是否是闰年,然后你可以做适当的逻辑。您还可以使用其验证 API 检查某年的 2 月 29 日是否存在。

于 2013-06-02T02:12:39.147 回答
1

这个怎么样?

var maxDays = 28;
if (randomYear%4 == 0 && (randomYear%100 != 0 || randomYear%400 == 0)) {
    maxDays = 29;
}
randomDay = 1 + Math.floor(Math.random() * maxDays);
于 2013-06-02T02:07:04.047 回答
0

您可以按照下面给出的方式进行操作。

function isLeapYear(year){
  return !(year%400) || ((year%100 > 0) && !(year%4)) ;
}

function getRandomDay(year){
  return 1 + Math.floor(Math.random()* (isLeapYear(year)?29:28))
}

var day = getRandomDay(2000);

性能方面,它可能不会做出很大的改变。但这是用更少的行数编写有组织的可重用代码的方法。

于 2013-06-02T02:59:32.793 回答