Datetime Добавить / Вычесть Просчет

$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");

Это выводит правильную дату сейчас. Тем не менее, на первый взгляд это выглядит довольно грязно и нечитаемо. Какие-либо решения?

2

Решение

Вы модифицирующий $datenow каждый раз, когда ты sub/addТаким образом, вы существенно меняете значение слова «сегодня».

3

Другие решения

Как упоминалось @ceejayoz, когда вы звоните add или же sub на DateTime объект, вы также измените его.

Начиная с PHP 5.5 появился новый класс: DateTimeImmutable, Этот класс имеет такие методы, как add а также sub также, но вместо изменения оригинала, он просто возвращает новый объект с примененной модификацией.

замещать $datenow = new DateTime(); с $datenow = new DateTimeImmutable(); и все должно просто начать работать.

1

По вопросам рекламы [email protected]