Php 计算任务的频率间隔
我有一个cron作业,它从数据库获取结果,以检查用户设置的时间间隔是否与今天的日期一致。我目前正在考虑按以下方式进行:Php 计算任务的频率间隔,php,datetime,intervals,Php,Datetime,Intervals,我有一个cron作业,它从数据库获取结果,以检查用户设置的时间间隔是否与今天的日期一致。我目前正在考虑按以下方式进行: 获取该行的时间列。Ex:2017-05-25 00:00:00 设置频率。例:每两周一次 以上述格式获取当前日期。Ex:2017-05-31 00:00:00 在几天内获得差异。例:6天 将频率设置转换为天。例:2周=14天 将(时间差(天))除以(频率(天)。Ex:6/14 这样的话,我只会得到结果是真的,当两个星期已经过去了,因为时间设置。即14/14、28/14、42/1
` $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作业运行此脚本。脚本需要再次检查今天的频率是否低于设置的频率
为了论证起见,这是计算差异的最佳逻辑吗
谢谢。这会有用的
Table "schedule"
`last_run` timestamp,
`frequency_seconds` int
应每两周执行一次的任务的查询示例:
SELECT *
FROM schedule
WHERE TIMESTAMPDIFF(last_run, NOW()) >= frequency_seconds
获取行后,将上次运行的
更新为NOW()
是否有代码?记录集中的行的格式?第一点的日期是什么?上次事件发生了吗?我认为你应该把你的问题改写一下,让它更清楚,更不容易闭嘴。我添加了代码。我以前没有添加任何代码,因为我认为问题陈述已经足够解释了。谢谢你指出这一点。我删除了我的问题,因为这个数据库有数千条记录
,而在最初的问题中,你可以循环记录。如果你想使用mysql,mysql内置了这个功能,请参见