您如何更有效地编程?
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”是否为闰年,并且在2月份是否有适当的日期。
我主要关注所有if和else语句。顺便说一下,我正在使用Javascript。 非常感谢你!!
答案 0 :(得分:5)
你甚至不需要数学:
var tmp = new Date(year,1,29); // attempt to get February 29th
isleapyear = (tmp.getMonth() == 1);
答案 1 :(得分:1)
这个怎么样?
var maxDays = 28;
if (randomYear%4 == 0 && (randomYear%100 != 0 || randomYear%400 == 0)) {
maxDays = 29;
}
randomDay = 1 + Math.floor(Math.random() * maxDays);
答案 2 :(得分:1)
如果您可以包含第三方库,请尝试使用此库:
你可以这样做:
moment([2000]).isLeapYear()
检查2000是否是闰年,然后你可以做适当的逻辑。您也可以使用其验证API检查某年的2月29日是否存在。
答案 3 :(得分: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);
性能方面,它可能不会发生重大变化。但这是用较少的行编写有组织的可重用代码的方法。