Мне нужно создать форму, в которой пользователь может ввести набор правил и вернуть список дат, соответствующих этим правилам.
Например:
'Первый день декабря этого года '=> 2020-12-01' Первый понедельник мая этого года '=> 2020-05-04
Мне удалось добиться этого, используя DateTime и указав относительную дату:
$ordinal = 'first';
$unit = 'day';
$month = 'december';
$date = new DateTime($ordinal . ' ' . $unit . ' of ' . $month . ' this year' );
Порядковый номер, единица измерения и месяц в настоящее время выбираются с помощью раскрывающихся меню в интерфейсе.
Проблема, с которой я сталкиваюсь, заключается в том, что несколько дат могут соответствовать правилам. Например:
«Первые выходные в декабре этого года» должно возвращаться 2020-12-05 и 2020-12-06. «Каждые выходные в марте» должно возвращать дату каждой субботы и воскресенья в течение марта.
Метод, который я использовал для отдельных дат, очевидно, не работает. При изменении моего unit
на «выходные» я получаю следующее сообщение об ошибке:
Fatal error: Uncaught Error: DateInterval::__construct() expects exactly 1 parameter, 0 given
Я смотрел DateInterval, но сомневаюсь, что это то, что мне нужно. Любая помощь будет принята с благодарностью.