我需要在一个或多个工作日安排一个重复的任务,每半周发生一次。 例如每隔3个星期,星期四和星期六。
通常情况下,如果任务每周只发生一次,我将能够计算今天与触发事件的最后一天之间的天数差异,并将其除以7得到周差异。由于任务可能每周运行几次,我不能使用这种方法。
我的想法是计算日历周之间的差异,并使用该值来确定是否应该在当前周执行计划任务:
$lastCW = date('W', strtotime($last_trigger_date));
$currentCW = date('W');
$cwDifference = $currentCW - $lastCW;
if (($cwDifference == $repeat_interval) || ($cwDifference == 0)) {
// run some code
}
当两个日期都在同一年时,此代码可以正常工作,但是当间隔跨越两年并且日历周差异变为负数时会出现问题。
处理此问题的最佳方法是什么?
答案 0 :(得分:1)
我总是在我的所有项目中都包含nestbot/carbon包。在PHP中使用日期是一种更简单,更简洁的方法。实际上它扩展了PHP DateTime类,因此您甚至可以将它与vanille DateTime对象一起使用。
如果您在哪里使用Carbon,您的代码段会如此:
$now = new Carbon();
$previous = new Carbon($last_trigger_date);
if ($now->diffInWeeks($previous) == $repeat_interval) {
// do your thing
}