Cre*_*EEK 13 php datetime for-loop
我的表单有2个字段 - Time_from和Time_to
现在我需要在我的数据库中为每一天添加一个条目(如果这些日期之间存在差异)ex.Time_from = 2013-08-26 08:00:00和Time_to = 2013-08-28 16:00:00所以在我的数据库中我应该得到3个条目
Time_from = 2013-08-26 08:00:00 and Time_to = 2013-08-26 16:00:00
Time_from = 2013-08-27 08:00:00 and Time_to = 2013-08-27 16:00:00
Time_from = 2013-08-28 08:00:00 and Time_to = 2013-08-28 16:00:00
Run Code Online (Sandbox Code Playgroud)
所以为了这个目的,我已经做了一个方法,我首先找到这两个日期之间的差异,然后我使用for循环,它将运行与这两个日期不同的天数,并且最后我只是添加1天.
public function createOffer($offer)
{
$time_from = new DateTime($offer->time_from);
$time_to = new DateTime($offer->time_to);
$interval = $time_from->diff($time_to);
for ($counter = 0; $counter <= $interval->d; $counter++) {
$offer->time_from = $time_from->format('Y-m-d H:i:s');
$offer_time_to = new DateTime($time_from->format('Y-m-d'));
$offer_time_to->setTime($time_to->format('H'), $time_to->format('i')
, $time_to->format('s'));
$offer->time_to = $offer_time_to->format('Y-m-d H:i:s');
if ($offer->validate()) {
$offer->save();
}
date_modify($time_from, '+1 day');
}
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,代码不起作用.
当我删除date_modify字段时,只有第一天会保存在我的数据库中(猜猜for循环只运行一次)
但是在我的代码中使用date_modify,只有最后一天保存在数据库中.
liy*_*kat 26
您可以使用Datatime对象的Add函数
在这里,我给你一个例子,在你的发布日期添加一个1
<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P1D'));
echo $date->format('Y-m-d') . "\n";
?>
Run Code Online (Sandbox Code Playgroud)
OUTPUT
2000-01-02
Run Code Online (Sandbox Code Playgroud)
希望它一定会帮助您解决问题.
$date = new DateTime('2017-01-17');
$date->modify('+1 day');
echo $date->format('Y-m-d'); // 2017-01-18
Run Code Online (Sandbox Code Playgroud)
您也可以这样做:
$dateTo = new \DateTime('1980-12-07 +1 day');
echo $dateTo->format('Y-m-d'); // 1980-12-08
Run Code Online (Sandbox Code Playgroud)