Предполагая, что $cNumber
, $dateFrom
, $dateTo
- это ваши PHP-переменные, которые хранят CNumber, From date и To date соответственно после отправки формы.
$objDateFrom = new DateTime(str_replace('/', '-', $dateFrom)); // create DateTime object for from-date
$objDateTo = new DateTime(str_replace('/', '-', $dateTo)); // create DateTime object for to-date
$fromYear = $objDateFrom->format('Y');
$toYear = $objDateTo->format('Y');
$fromDate = $objDateFrom->format('Y-m-d');
$toDate = $objDateTo->format('Y-m-d');
$arrObjDates[] = new DateTime($fromDate); // this array stores DateTime objects for from-date and to-date plus all intermediary dates; by default it always stores from-date as the first element
for ($i = $fromYear; $i <= $toYear; $i++) {
$tmpDate = $i . '-03-31';
if ($i == $fromYear) { // the first iteration
if ($fromDate > $tmpDate) { // if from-date is after the FY end date in the same year, skip further loop execution
continue;
}
}
if ($i == $toYear) { // the last iteration
if ($toDate > $tmpDate) { // if to-date is after the FY end date in the same year, store the FY end date 'yyyy-03-31'
$arrObjDates[] = new DateTime($tmpDate);
}
$arrObjDates[] = new DateTime($toDate);
} else {
$arrObjDates[] = new DateTime($tmpDate);
}
}
$qry = '';
if (!empty($arrObjDates)) {
$qry = 'INSERT INTO `tableA` (`c_number`, `date_from`, `date_to`) VALUES';
for ($idx = 0; $idx < count($arrObjDates) - 1; $idx++) {
if ($idx > 0) {
$qryFromDate = $arrObjDates[$idx]->format('Y') . '-04-01';
} else {
$qryFromDate = $arrObjDates[$idx]->format('Y-m-d');
}
$qry .= '(' . $cNumber . ', \'' . $qryFromDate . '\', \'' . $arrObjDates[$idx+1]->format('Y-m-d') . '\'),';
}
}
$qry = trim($qry, ',');
Мне потребовалось некоторое время, чтобы закодировать это, но в конце я надеюсь, что это должно работать. Я не пытался упростить код, но уверен, что есть способы сделать это.