我必须获取用户选择的开始和结束日期的日期范围,检查日期是否落在周末和/或公共假期,并插入到数据库中每个有效日期直到结束日期。
下面是我的代码:
$aryRange=array();
$istartTime=mktime(1,0,0,substr($startTime,5,2), substr($startTime,8,2),substr($startTime,0,4));
$iendTime=mktime(1,0,0,substr($endTime,5,2), substr($endTime,8,2),substr($endTime,0,4));
if ($iendTime>=$istartTime)
{
array_push($aryRange,date('Y-m-d',$istartTime)); // first entry
while ($istartTime<$iendTime)
{
$istartTime+=86400; // add 24 hours
array_push($aryRange,date('Y-m-d',$istartTime));
}
}
$aryRange = array_values($aryRange);
$dates = array($aryRange);
$fdate = strtotime($startTime);
$day = date("N",$fdate);
$holidays = $this->Leave->PublicHoliday->find ('all', array('fields'=>array('PublicHoliday.SetDate')));
foreach($dates as $key => $value)
{
if ($day == 7 || $day == 6)
{
unset ($dates[$k]);
continue;
}
if (in_array($value, $holidays))
{
unset ($dates[$k]);
continue;
}
}
我不知道如何为每个条目分配开始日期和结束日期并保存数据。我认为这可以在foreach
循环中完成。
$this->request->data['Leave']['event_date'] = $value[0];
$this->request->data['Leave']['event_stop_time'] = $value[0];
$this->Leave->save($this->request->data);
我可以在执行foreach
循环时逐行保存吗?非常感谢有关保存数据的任何帮助。
铌: event_date
将类似于一天的event_stop_time
。
尝试以下操作:
$period = new DatePeriod(new DateTime($istarTime), new DateInterval('P1D'), new DateTime($iendTime));
$holidays = $this->Leave->PublicHoliday->find('list', array('fields'=>array('PublicHoliday.SetDate')));
foreach ($period as $date) {
if ($date->format('N') < 6 && !in_array($date->format('Y-m-d'), $holidays)) {
$data[] = ['Leave' => [
'event_date' => $date->format('Y-m-d'),
'event_stop_time' => $date->format('Y-m-d'),
]];
}
}
$this->Leave->saveMany($data);
如果PublicHoliday.SetDate
是数据库中的DATE
字段,则上述方法应该有效。