【发布时间】:2013-12-24 04:39:13
【问题描述】:
我有一个事件,它有开始日期、“2013-12-06 21:00:00”、持续时间和重复天数位掩码。 问题是用户可以指定持续时间 > 24 小时,并选择事件将自行交叉的重复天数。
例如
- 活动持续时间为 25 小时,用户选择每天重复一次,因此它会自行交叉。
- 事件持续时间为 49 小时,用户选择星期一和星期三,因此事件将再次交叉。
有必要考虑验证应该包括在周一和周日的事件交叉检查。
能否请您查看我的解决方案?也许它可以以某种方式进行优化?
// Input params
$start = '2013-12-06 12:42:00';
$duration = 60 * 60 * 24 + 1; // specify duration
$days = '1000001'; // monday is at 0 position, sunday is at 6
// Loop internal vars
$dayLength = 60 * 60 * 24;
$loopStart = strtotime($start);
// had to take 8 days to check all week
$loopEnd = $loopStart + ($dayLength * 8);
$previousDateEnd = null;
for ($loop = $loopStart; $loop < $loopEnd; $loop += $dayLength) {
$weekday = date('N', $loop) - 1;
if ($days{$weekday}) {
if (!is_null($previousDateEnd) && $loop < $previousDateEnd) {
die('Event cross itself!');
}
$previousDateEnd = $loop + $duration;
}
}
UPD:我的代码包含一个错误,如果我尝试这样的输入参数,它将找不到事件交叉:
$start = '2013-12-06 12:42:00';
$duration = 60 * 60 * 24 * 2 + 1;
$days = '0001010'; // if one day is not just after another - it does not detect cross!
【问题讨论】:
标签: php validation date recurrence