@DarkKefir

Запуск cron'a с условиями?

PHP:
// время создания сущности в UNIX-формате (напр., 150123456)
$time_created = $entity->time_created;

// сегодня
$today = time();

// выясняю день/месяц/год создания сущности
$d = date('j',$time_created);
$m = date('n',$time_created); 
$y = date('Y',$time_created);
			
// указываю течение 3-го, 6-го и 7-го дня с момента создания сущности
$three_days = mktime(0, 0, 0, $m, $d+3, $y);
$six_days = mktime(0, 0, 0, $m, $d+6, $y);
$seven_days = mktime(0, 0, 0, $m, $d+7, $y);


Далее в коде ставлю задачи в зависимости от того, какой сегодня день ото дня, когда создана сущность, напр.:
if($today == $three_days) {
  // тут логика
}

if($today == $six_days) {
  // тут логика
}

if($today == $seven_days) {
  // тут логика
}


Допустим, это уведомления с отправкой на email.

Запускаю крон ежедневно на выполнение этой задачи, напр. в 0-01.
Срабатывает не всегда.

Ставлю на каждый час. Такая же проблема.

Подозреваю, что ошибка в указании периодов, т.е. необходимо точное соответствие mktime'ов.

Так:
if($today >= $three_days) {
  // тут логика
}

в силу ряда причин нельзя.

Сам я ни разу не профи, а только учусь, поэтому прошу помочь с решением или дать правильный совет.
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
kotomyava
@kotomyava
Системный администратор
У вас не корректное сравнение. Дата должна не равняться вашему $three_days, а быть между ним и 23:59 того же дня.

Также, лучше работать с DateTime, где есть DateTime::diff, DateTime::add и.т.п., это намного удобнне, нагляднее и лаконичнее, чем всякие mktime|date и.т.п.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
if($today == $three_days)
Вы ожидаете совпадение с точностью до секунды
но при этом
Запускаю крон ... в 0-01

И в то-же время
mktime(0, 0, 0, $m, $d+3, $y);
то есть 00:00

Удивлюсь, если оно хоть когда-то сработает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы