1

使用语言:PHP

我有一个表格可以输入
CNumber
DateFrom
DateTo

单击提交时,我希望将日期分解为财政年度的功能。
例如-通过上面的表格输入
CNumber:1
DateFrom:12/12/2013
DateTo:31/03/2014

那么要插入到表中的( OUTPUT )值应该是
CNumber:1
DurationFrom:12/12/2011
DurationTo:31/03/2012

CNumber:1
DurationFrom:01/04/2012
DurationTo:31/03/2013

CNumber:1
DurationFrom:01/04/2013
DurationTo:31/03/2014

我希望逻辑清楚。
我无法对上述问题进行编码。

谢谢你的帮助..!!

4

2 回答 2

1

您可以使用 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])));
于 2011-06-30T06:42:55.293 回答
0

假设$cNumber, $dateFrom,$dateTo是您的 PHP 变量,在提交表单后分别存储 CNumber、From 日期和 To 日期。

$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, ',');

我花了一段时间来编写这个代码,但最后我希望它可以工作。我没有尝试简化代码,但我确信有办法做到这一点。

于 2011-06-30T09:02:32.900 回答