打破财务年度PHP代码的日期

时间:2011-06-30 06:31:52

标签: php date financial

使用的语言: 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:2013年1月4日
DurationTo:31/03/2014

我希望逻辑清晰 我无法编码上述问题。

感谢您的帮助.. !!

2 个答案:

答案 0 :(得分: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])));

答案 1 :(得分:0)

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

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

我花了一段时间对此进行编码,但最后我希望它能够正常工作。我没有尝试简化代码,但我确信有办法这样做。