Files
ai-web/app/Services/Crawler/CrawlRuleScheduleService.php

45 lines
1.0 KiB
PHP
Raw Normal View History

2026-02-18 12:56:36 +08:00
<?php
declare(strict_types=1);
namespace App\Services\Crawler;
use App\Models\CrawlRule;
use Carbon\CarbonImmutable;
use Cron\CronExpression;
class CrawlRuleScheduleService
{
public function isDue(CrawlRule $rule, ?CarbonImmutable $now = null): bool
{
if (! $rule->enabled) {
return false;
}
$now ??= CarbonImmutable::now($rule->timezone ?: 'Asia/Shanghai');
try {
$cron = new CronExpression($rule->cron_expression);
} catch (\Throwable) {
return false;
}
return $cron->isDue($now);
}
public function nextRunAt(CrawlRule $rule, ?CarbonImmutable $from = null): ?CarbonImmutable
{
$from ??= CarbonImmutable::now($rule->timezone ?: 'Asia/Shanghai');
try {
$cron = new CronExpression($rule->cron_expression);
$next = CarbonImmutable::instance($cron->getNextRunDate($from));
} catch (\Throwable) {
return null;
}
return $next->setTimezone('UTC');
}
}