$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");
Это выводит правильную дату сейчас. Тем не менее, на первый взгляд это выглядит довольно грязно и нечитаемо. Какие-либо решения?
Вы модифицирующий $datenow
каждый раз, когда ты sub
/add
Таким образом, вы существенно меняете значение слова «сегодня».
Как упоминалось @ceejayoz, когда вы звоните add
или же sub
на DateTime
объект, вы также измените его.
Начиная с PHP 5.5 появился новый класс: DateTimeImmutable
, Этот класс имеет такие методы, как add
а также sub
также, но вместо изменения оригинала, он просто возвращает новый объект с примененной модификацией.
замещать $datenow = new DateTime();
с $datenow = new DateTimeImmutable();
и все должно просто начать работать.