【发布时间】:2017-05-30 08:32:54
【问题描述】:
我有一个从数据库获取结果的 cron 作业,以检查用户设置的时间间隔是否落在今天的日期。我目前正在考虑这样做:
- 获取行的时间列。例如:2017-05-25 00:00:00
- 获取频率设置。例如:每 2 周一次。
- 以上述格式获取当前日期。例:2017-05-31 00:00:00
- 获取天数差异。例如:6 天。
- 将频率设置转换为天。例如:2 周 = 14 天;
- 将(时间差(天))除以(频率天)。例如: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