PHP 语法和推理与日期 if/else 语句


PHP Syntax and Reasoning with Date If/Else Statement

我正在做一个项目,我遇到了以下代码:

$year    = date('Y') - (date('n') > 9 ? 0 : 1);

我读它的方式似乎是;如果年份(2014(减去月份(12(大于9,那么布尔值是假的,否则就是真的。

但是,当我去打印变量时,它会打印 2014。然后我把 9 改成 9000 看看会发生什么,它变成了 2013 年。我知道这听起来很简陋,但我不明白为什么,我无法立即在谷歌上找到这有什么意义。

编辑:抱歉,代码末尾有一个不应该存在的剩余括号。代码已编辑。

如果更改 date() 的函数调用,代码将如下所示:

$year    = 2014 - (12 > 9 ? 0 : 1);

现在你可能会更好地看到 12 大于 9,这是真的!所以 0 得到的"使用":

$year    = 2014 - 0;

所以结果是:

2014

您的采用是错误的,三元运算符条件是错误的!

这看起来像是获取会计年度的公式。 如果月份是 10 月至 12 月,则括号的计算结果为 0,否则为 1。 因此,除非日期在 9 月 30 日之后,否则它会从当前年份中减去 1。

我认为您没有注意到第二个日期参数周围的额外偏执。

您正在像这样阅读代码:

date('Y') - date('n')

但是,代码实际上说:

data('Y') - 1 // or 0 (depending on the returned int from the ternary operation)

另一种写法是:

$dateX = date('Y');
$dateY = (date('n') > 9 ? 0 : 1);
$result = $dateX-$dateY;
// result will output either 2014 (from $dateX) or 2013 (if $dateY equals 1)

试试这个。

 $year    = (date('Y') - (date('n')) > 9 ? "false" : "true");
 echo $year; //this will give you false.

或者像这样,

 $year    = (date('Y') - (date('n')) > 9 ? 0 : 1);
 echo $year; //this will give you 0.