每周指定的日期重复事件直到特定日期

jak*_*kob 18 php mysql datetime date

创建事件时,我需要以datetime格式设置事件开始和事件结束(0000-00-00 00:00:00)然后我可以选择设置每周重复该事件直到特定日期(0000-00-00)但是我无法在数据库中正确插入重复事件.这是我有的:

$startDateTime = '2015-04-30 10:30:00';
$endDateTime = '2015-04-30 11:30:00';
$repeatEndDate = '2015-06-01';
$timestamp = strtotime($startDateTime);
$day_of_week = date('l', $timestamp);
$step  = 1;
$unit  = 'W';
$repeatStart = new DateTime($startDateTime);
$repeatEnd   = new DateTime($repeatEndDate);
$repeatStart->modify($day_of_week);  
$interval = new DateInterval("P{$step}{$unit}");
$period   = new DatePeriod($repeatStart, $interval, $repeatEnd);

foreach ($period as $key => $date ) {
    $repeatQuery = 'INSERT INTO event(start,end,status,repeats) VALUES ("'.$startDateTime.'","'.$endDateTime.'","'.$status.'","'.$repeatEndDate.'")';
    $repeatResult = mysqli_query($db, $repeatQuery) or die (mysqli_error($db));
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时print_r($date);,就像这样,没有实际时间00:00:00

DateTime Object
(
    [date] => 2015-04-30 00:00:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)
Run Code Online (Sandbox Code Playgroud)

我知道我不能插入这样的值,但我不知道如何从对象中获取正确的值.所以在这个例子中,我需要插入从2015-04-30开始到2015-06-01结束的每周四10:30:00开始并在11:30:00结束的事件(事件总是在同一天结束).怎么能实现这一目标?

谢谢

Ste*_*hen 12

问题是你DateTime::modify用日名称(目前是'星期四').此值是根据$startDateTime变量计算的,然后用于修改该变量,因此它唯一的效果就是将该DateTime实例的Time部分重置回0:00:00.

下面给出了我期望的结果:(我已经注释掉了你需要从你的部分删除的部分,以便更容易看到差异)

date_default_timezone_set('Etc/UTC');

$startDateTime = '2015-04-30 10:30:00';
$endDateTime = '2015-04-30 11:30:00';
$repeatEndDate = '2015-06-01';
#$timestamp = strtotime($startDateTime);
#$day_of_week = date('l', $timestamp);
$step  = 1;
$unit  = 'W';
$repeatStart = new DateTime($startDateTime);
$repeatEnd   = new DateTime($repeatEndDate);
#$repeatStart->modify($day_of_week);  
$interval = new DateInterval("P{$step}{$unit}");
$period   = new DatePeriod($repeatStart, $interval, $repeatEnd);



foreach ($period as $key => $date ) {
    echo($date->format('Y-m-d H:i:s')) . PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

运行上述结果的结果是:

2015-04-30 10:30:00
2015-05-07 10:30:00
2015-05-14 10:30:00
2015-05-21 10:30:00
2015-05-28 10:30:00
Run Code Online (Sandbox Code Playgroud)