Нужно сделать запуск скрипта каждые 30 дней (или каждый месяц) от определенной даты. Даты берутся из бд, их много и они разные.
Допустим у нас есть дата: 10.01.19, нужно что-бы скрипт срабатывал через каждые 30 дней. Т.е. 09.02.19, 11.03.19, 10.03.19 и т.д.
Придумал только это:
$now = time();
$save_date = strtotime($update_date);
$date_diff = $now - $save_date;
$datefloor = floor($date_diff / (60 * 60 * 24));
if($datefloor >= 30){
echo 'ok';
}
Но так скрипт будет выполнятся только 1 раз, т.е. совсем не то что нужно. Подскажите, пожалуйста, какие-то варианты реализации.
Вот мой вариант функции (вместо вашей), которая делает то, что вы пытались реализовать.
Она по параметрам определенная дата из бд, интервал и текущая дата определяет - пора или нет запускать некую обработку:
<?php
/**
* Делятся ли без остатка кол-во дней в периоде на количество дней интервала
*
* @param $start DateTime начало периода
* @param $days int интервал, в днях
* @param $now DateTime конец периода
* @return boolean
*/
function isDue(DateTime $start, $days = 30, DateTime $now = null)
{
$now = $now === null? new DateTime("now"): $now;
return $now->diff($start)->format("%a") % $days === 0;
}
Вот примеры ее использования:
/
// тесты
//
echo (int)isDue(
DateTime::createFromFormat("d.m.y", "10.01.19"),
30,
DateTime::createFromFormat("d.m.y", "08.02.19")
); // --> 0
echo (int)isDue(
DateTime::createFromFormat("d.m.y", "10.01.19"),
30,
DateTime::createFromFormat("d.m.y", "09.02.19")
); // --> 1
echo (int)isDue(
DateTime::createFromFormat("d.m.y", "10.01.19"),
30,
DateTime::createFromFormat("d.m.y", "10.03.19")
); // --> 0
echo (int)isDue(
DateTime::createFromFormat("d.m.y", "10.01.19"),
30,
DateTime::createFromFormat("d.m.y", "11.03.19")
); // --> 1
echo (int)isDue(
DateTime::createFromFormat("d.m.y", "10.01.19"),
30,
DateTime::createFromFormat("d.m.y", "09.04.19")
); // --> 0
echo (int)isDue(
DateTime::createFromFormat("d.m.y", "10.01.19"),
30,
DateTime::createFromFormat("d.m.y", "10.04.19")
); // --> 1
Песочница
Продвижение своими сайтами как стратегия роста и независимости