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