在php命令中计算日期操作。
39680/40171 [============================>.] - ETA: 0s
Score: 0.1192
Evaluation Accuracy: 97.50%
Prediction Accuracy: 9.03%
使用上述php代码,日期php > echo $d = date('Y-m-d');
2019-07-26
php > echo date("Y-m-d",strtotime("$d -1 day"));
2019-07-25
减去1天= 2019-07-26
。
为什么不能将两个命令合并为一个,例如以下php代码?
2019-07-25
为什么不能用表达式php > echo date("Y-m-d",strtotime("date('Y-m-d') -1 day"));
1970-01-01
替换日期变量$d
?
答案 0 :(得分:2)
这是一个字符串"date('Y-m-d') -1 day"
-出于明显的安全原因,字符串中包含的函数不会自动执行...(您可以使用eval
,但这是另一天的话题)。否则,如果您这样做,您可以很容易地劫持服务器,实际上,许多漏洞利用诸如eval()
或e
修饰符之类的Regex脚本(由于这个原因,PHP 7以来已将其删除)来执行。通过PHP包含在字符串中的任意代码。
所以只要问问自己,自1970年以来到字面字符串"date('Y-m-d') -1 day"
的秒数是多少,如果您回答我不知道,PHP也不知道。
就个人而言,我将放弃该程序的功能并执行此操作:
echo (new DateTime)->modify('-1 day')->format('Y-m-d');
输出
2019-07-24
如果您真的想使用Date函数和过程样式,那么就可以完成
echo date('Y-m-d', strtotime(date('Y-m-d').' -1 day'));
在这里,我正在将内部.
函数调用的输出与字符串date
进行串联(' -1 day'
),当字符串全部由PHP组合在一起时,它看起来像这样2019-07-25 -1 day
。日期功能可以理解并且可以正常工作。
可能使您(还有另一件事要理解)的是变量插值(双引号中的变量被PHP取代)。
date("Y-m-d",strtotime("$d -1 day")); //$d is replaced by value
我喜欢在执行此操作时使用{}
,它更易于阅读(基本上在我的IDE中看起来更好),并且可以将其与诸如属性之类的东西一起使用,例如:{{1} },没有括号将无法正常工作。对象的方法也可以与方括号一起使用,例如echo "foo {$this->name}"
。
现在,不幸的是,日期函数不是变量,因此插值不适用于它(出于上述原因):
$D=new DateTime; echo "today is {$D->format('Y-m-d')}"
因此,在第一个示例中,您发现 "date('Y-m-d') -1 day"
的最终结果是类似$d
的东西-与我上面的内容差不多……之前(第二个示例)就是上面代码块中的内容(按字面意思)。
干杯!
PS。我喜欢说“插值法”,因为它使我听起来很聪明……大声笑。