$start = mktime(0, 0, 0, $month ?: 1, 1, $year);
$end = mktime(23, 59, 59, $month ?: 12, $month ? date('t', $start) : 31, $year);
или
$start = new \DateTime("$year-" . ($month ?: 1) . '-1 00:00:00');
$end = new \DateTime("$year-" . ($month ?: 12) . '-' . ($month ? $start->format('t') : 31) . ' 23:59:59');
Не уверен, если вы рассмотрите этот очиститель, но он короче и обходится без относительных расчетов.
самый чистый и самый понятный способ написать это, вероятно:
if ($month) {
$start = new \DateTime("$year-$month-1 00:00:00");
$end = new \DateTime("$year-$month-" . $start->format('t') . ' 23:59:59');
} else {
$start = new \DateTime("$year-1-1 00:00:00");
$end = new \DateTime("$year-12-31 23:59:59");
}
Вам, возможно, вообще не потребуется задействовать DateTime
, если вы собираетесь использовать это как значение для запроса SQL.