我正在做一个项目,我遇到了以下代码:
$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.