我正在尝试根据循环方法重新安排重复发生的事件:每天,每周或每月。
假设我有这些数据:
$now = time();
$start_date = '01/01/2011 14:00';
$end_date = '01/01/2011 14:20';
$start_time = date('H:i', $start_date);
$end_time = date('H:i', $end_date);
$period = $end_date - $start_date; // in this case, 20 minutes
此事件每天重新安排为:
$new_time_start = strtotime(date("m/d/Y {$start_time}", $now));
$new_time_end = $new_time_start + $period;
和月度:
$start_day = date('d', $start_date);
$new_time_start = strtotime(date("m/{$start_day}/Y {$start_time}", $now));
$new_time_end = $new_time_start + $period;
这似乎是工作,但我不知道如何做同样的每周事件:
例如'01/01/2011'是星期六,所以我想把事件重新安排到每个星期六(根据PHP一周的第6天)。
任何想法?
试一试…
$today = date('w');
$day = date('w', $start_date);
$diff = abs(7 - ($today - $day));
$new_time_start = strtotime('+'.$diff.'days', strtotime(date("m/d/Y {$start_time}")));
$new_time_end = $new_time_start + ($end_date - $start_date);
似乎你缺少一些strtotime()包装你的$start_date和$end_date值。我假设您将开始和结束日期变量存储为unix时间戳,因此我也没有将它们包含在我的代码中。
另外,作为旁注,您不必在date()中输入time()作为第二个参数。如果缺少时间值,它将使用当前时间。所以你可以删除所有的$now实例,它仍然会工作。
我不太确定我理解你的问题,但是你不能这样做吗?
$time = '2011-01-31';
$weekLater = date('Y-m-d', strtotime('+7 days ' . $time));
echo $time . ' -> ' . $weekLater;
Output : 2011-01-31 -> 2011-02-07
无论你给它什么日期,它都会告诉你7天后的日期。这是你需要的吗?