【问题标题】:Calculating frequency interval for tasks计算任务的频率间隔
【发布时间】:2017-05-30 08:32:54
【问题描述】:

我有一个从数据库获取结果的 cron 作业,以检查用户设置的时间间隔是否落在今天的日期。我目前正在考虑这样做:

  1. 获取行的时间列。例如:2017-05-25 00:00:00
  2. 获取频率设置。例如:每 2 周一次。
  3. 以上述格式获取当前日期。例:2017-05-31 00:00:00
  4. 获取天数差异。例如:6 天。
  5. 将频率设置转换为天。例如:2 周 = 14 天;
  6. 将(时间差(天))除以(频率天)。例如:6/14

这样我只会在设置的时间过去 2 周后才能得到结果。即,14/14、28/14、42/14、...

如果频率以月为单位,我可以开始除以 30。但不知何故,这感觉像是一种 hacky 方式。所以我的问题是是否有更好的方法来做这个计算来检查差异。

这就是我在上面的例子中所做的。

` $frequency = ; // Get the relevant fields from db
  $today = date(Y-m-d H:i:s);
     foreach ($frequency as $key => $value) {
       $frequency_in_days;
       $frequency_type = $value->type;
       $frequency_repeat = $value->repeat;

       if($frequency_type == 1){
         $frequency_in_days = $frequency_repeat;
       } elseif($frequency_type == 2) {
         $frequency_in_days = $frequency_repeat * 7;
       } elseif($frequency_type == 3) {
         $frequency_in_days = $frequency_repeat * 30;
       } elseif($frequency_type == 4) {
         $frequency_in_days = $frequency_repeat * 365;
       }

      //  Get number of days spent between start_date and today in days.
       $interval = date_diff($value->start_date, $today)->format('%a');
       $result = $interval % $frequency_in_days;

       if ($result == 0) {
        //  Frequency falls today! Do the job.
       }
     }`

注意:cron 作业运行此脚本。该脚本再次需要检查今天是否低于设置的频率。

为了论证,这是计算差异的最佳逻辑吗?

谢谢。

【问题讨论】:

  • 你有代码吗?记录集中行的格式?第一点的日期是什么?最后一个事件发生了?我认为您应该稍微改写您的问题以使其更清晰,并且不易关闭。 stackoverflow.com/help/mcve
  • 我已经添加了代码。我之前没有添加任何代码,因为我认为问题陈述已经足够解释了。感谢您指出这一点。
  • 我删除了我的问题,因为this db has thousands of records 而在原始问题中,您遍历记录
  • 如果你想使用 mysql 来做这件事,mysql 有这个内置的功能见dev.mysql.com/doc/refman/5.7/en/create-event.html

标签: php datetime intervals


【解决方案1】:

这会起作用

Table "schedule" 
`last_run` timestamp, 
`frequency_seconds` int

应该每两周执行一次的任务的示例查询:

SELECT *
FROM schedule
WHERE TIMESTAMPDIFF(last_run, NOW()) >= frequency_seconds

获取行后将last_run更新为NOW()

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多