olegtytarenko2
@olegtytarenko2
разработываю саты на cms PHP. Сейчас практикую yii

Как правильно задать интервал времени через PHP?

Ставлю такой код. Возвращает целвй месяц с интервалом в один день. Как бы цель достигнута, но не хватает последнего дня месяца. При текущем Марте всего 31 день, а выдает 30. Как мне правильно задать дату что бы он мне показал все дни месяца?

$begin = new \DateTime(date('Y-m-01'));
                $interval = new \DateInterval('P1D');
                $end_date = date('Y-m-') . date('t');
                $end = new \DateTime($end_date);
                $date = new \DatePeriod($begin,$interval, $end);
  • Вопрос задан
  • 4378 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
$begin = new \DateTime(date('Y-m-01'));
                $interval = new \DateInterval('P1D');
                $end_date = date('Y-m-') . date('t');
                $end = new \DateTime($end_date);
                $end->setTime(23,59,59);
                $date = new \DatePeriod($begin,$interval, $end);

Вариант с нативным вычислением дат, чуть компактнее и удобочитаемость получше:
$begin = new \DateTime('first day of this month');
                $interval = new \DateInterval('P1D');
                $end = new \DateTime('last day of this month');
                $end->setTime(23,59,59);
                $date = new \DatePeriod($begin,$interval, $end);


Или не такой теоретически красивый, зато без странной подпорки:
for ($d = clone $begin; $d <= $end; $d->modify('next day midnight')) {
    echo $d->format('Y-m-d'),PHP_EOL;
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Муахаха =)
$end_date = date('Y-m-t');
Ответ написан
$end_date = date('Y-m-') . date('t'); // ???
$end_date = date('Y-m-t');

$begin = new \DateTime(date('Y-m-00'));
$end    = new \DateTime(date('Y-m-t'));

var_dump($begin->diff($end)->days); // int(31)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы