-3

这是我不理解的功能:

$year = date("Y");
$leapYear = false;
if((($year%4==0) && ($year%100==0)) || ($year%400==0))
    $leapYear = true;

这是否意味着,如果(($year is divided by 4 but not divided by 100) or (the year is divided by 400))那是闰年?

我是 PHP 新手,请任何人帮助我理解这些陈述。

4

3 回答 3

2

我认为您可能会感到困惑,因为您提供的代码没有找到闰年。闰年可以被 4 整除,但不能被 100 整除。除非它们也能被 400 整除。如果你翻转逻辑,就会更容易理解。如果它可以被 400 整除,那么无论如何都是闰年。否则,如果它可以被 4 整除且不能被 100 整除,则为闰年。

// pseudocode
if ( year % 400 == 0  || (year % 4 == 0 && year % 100 != 0))
    return true;
else
    return false;

你可以玩弄它,然后说:

return year % 400 == 0  || (year % 4 == 0 && year % 100 != 0)

&& 意味着双方都必须true为了 && 返回true

于 2013-07-16T03:06:36.710 回答
0

这基本上是伪代码中所说的

if(year is divisible by 4 or 100) {
  leapyear = true
} else if (year is divisible by 400) {
  //this will never be hit because it would meet the first case
  leapyear = true
}
于 2013-07-16T02:58:28.857 回答
-1

根据您的代码,您的第二个猜测是正确的。

if((($year % 4==0) && ($year % 100==0)) || ($year % 400==0))

意味着其中任何一个必须为真才能成为闰年:

  1. ($year%4==0) && ($year%100==0)
  2. $year%400==0

因此,在这些条件下,一年是闰年:

  • 年能被 4 整除,也能被 100 整除

或者

  • 年能被 400 整除

但是,您发布的代码是错误的,因为它没有正确定义闰年。

一年是闰年,如果它可以被 4 整除,除非它可以被 100 整除并且不能被 400 整除。所以在你的if陈述中($year % 100 == 0)应该是($year % 100 != 0)

所以正确的逻辑是这样的:

if ((($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0))
    $leapYear = true;

关于&&

&&表示 AND,表达式A && B为真或假。

根据定义,A && B只有当两者都为真时才AB真。如果其中任何一个为假,A && B则为假。

于 2013-07-16T02:59:46.533 回答