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

1

@ceejayozが述べたように、またはオブジェクトを呼び出すと、addそれも変更されます。subDateTime

PHP 5.5 以降、新しいクラスがあります: DateTimeImmutable. このクラスにはaddとのようなメソッドがありsubますが、元のオブジェクトを変更する代わりに、変更が適用された新しいオブジェクトを返すだけです。

と置き換える$datenow = new DateTime();$datenow = new DateTimeImmutable();、物事が機能し始めるはずです。

于 2014-12-02T16:08:32.480 に答える