Разбивка даты на финансовые годы php код - PullRequest
1 голос
/ 30 июня 2011

Используемый язык: PHP

У меня есть форма для входа
номер C
DateFrom
DateTo

При нажатии кнопки "Отправить" я хочу, чтобы функциональность разбивала даты на финансовые годы.
Например, INPUT через форму выше
Номер C: 1
DateFrom: 12/12/2013
DateTo: 31/03/2014

Тогда (OUTPUT) значения для вставки в таблицу должны быть
Номер C: 1
DurationFrom: 12/12/2011
DurationTo: 31/03/2012

номер C: 1
DurationFrom: 01/04/2012
DurationTo: 31/03/2013

номер C: 1
DurationFrom: 01/04/2013
DurationTo: 31/03/2014

Надеюсь, логика ясна.
Я не могу закодировать вышеуказанную проблему.

Спасибо за вашу помощь .. !!

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Вы можете использовать функцию mktime (), чтобы достичь своей цели! например, есть простой код, но если вы ищете его больше, вы можете написать, что вы хотите:

list($df_day,$df_month,$df_year) = split('/',$durationFrom);
list($dt_day,$dt_month,$dt_year) = split('/',$durationTo);
$newDurationFrom = date("dd/mm/yyyy",mktime(0,0,0,$df_month,$df_day,($df_year+[YOUR VALUE HERE])));
$newDurationTo = date("dd/mm/yyyy",mktime(0,0,0,$dt_month,$dt_day,($dt_year-[YOUR VALUE HERE])));
0 голосов
/ 30 июня 2011

Предполагая, что $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, ',');

Мне потребовалось некоторое время, чтобы закодировать это, но в конце я надеюсь, что это должно работать. Я не пытался упростить код, но уверен, что есть способы сделать это.

...