2
$datenow    = new DateTime();
$dn = $datenow -> format("Y-m-d"); //2014-12-02
$yesterday  = $datenow -> sub(new DateInterval('P1D')) -> format("Y-m-d"); //2014-12-01
$yestertwo  = $datenow -> sub(new DateInterval('P2D')) -> format("Y-m-d"); //2014-11-29
$tomorrow   = $datenow -> add(new DateInterval('P1D')) -> format("Y-m-d"); //2014-11-30
$tomotwo    = $datenow -> add(new DateInterval('P2D')) -> format("Y-m-d"); //2014-12-02

我必须在这里遗漏一些东西。日期计算似乎已关闭。

更新:

$datenow            = new DateTime();
$dn            = $datenow -> format("Y-m-d");
$yesterday     = $datenow -> sub(new DateInterval('P1D')) -> format("Y-m-d");
$yestertwo     = $datenow -> sub(new DateInterval('P1D')) -> format("Y-m-d");
$tomorrow      = $datenow -> add(new DateInterval('P3D')) -> format("Y-m-d");
$tomotwo       = $datenow -> add(new DateInterval('P1D')) -> format("Y-m-d");

现在输出正确的日期。但是,乍一看,它看起来有点凌乱且难以阅读。有什么解决办法吗?

4

2 回答 2

3

您每次都在修改 / ,因此您实际上是在更改“今天”的含义。$datenowsubadd

于 2014-12-02T15:40:56.317 回答
1

正如@ceejayoz 提到的,当您调用add或对象subDateTime,您也会修改它。

从 PHP 5.5 开始有一个新类:DateTimeImmutable. 这个类也有类似addandsub的方法,但是它不是修改原始的,而是返回一个应用了修改的新对象。

替换$datenow = new DateTime();$datenow = new DateTimeImmutable();和 事情应该刚刚开始工作。

于 2014-12-02T16:08:32.480 回答