使用的语言: 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
我希望逻辑清晰
我无法编码上述问题。
感谢您的帮助.. !!
答案 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, ',');
我花了一段时间对此进行编码,但最后我希望它能够正常工作。我没有尝试简化代码,但我确信有办法这样做。