Непонятно, то ли баг, то ли работают эти методы по непонятной логике.
$offset_month = -6;
$currDate = strtotime("30.08.2017");
Попробуем из этой даты отнять 6 месяцев.
Либо так:
$dt = strtotime((int)$offset_month . " month", $currDate);
echo date("d.m.Y", $dt) . "<br>";
или через DateTime
$date = new DateTime();
$date->setDate(date("Y", $currDate), date("m", $currDate), date("d", $currDate));
$date->modify('-6 month');
echo $date->format('d.m.Y');
Результат один и тот же. Возвращает 02.03.2017, хотя должен 28.02.2017.
Подскажите, в чем состоит проблема и как ее решить? С другими датами норм. Из-за этого в скриптах расчета получаются косяки.
Это классическая проблема, связанная с различным количеством дней в месяцах, и решение зависит от результата, который мы хотим получить.
Представим, что у нас дата 31 августа, и надо отнять 2 месяца. РНР по умолчанию нам вернет 1 июля. А ты хочешь получить? 31 июня? Такой даты не существует. 30-е? А с какой стати?
хотя должен 28.02.2017.
Никто тебе ничего не должен. Если тебе лично нужно строго соблюдать количество месяцев и обрезать лишние дни, то надо написать код для этого
function dateDiffCorrectMonth(DateTime $date, $diff)
{
$newdate = clone $date;
$newdate->modify($diff);
if ($newdate->format("d") == $date->format("d"))
{
return $newdate;
}
$newdate = date_create($date->format("Y-m-15"))->modify($diff);
return date_create($newdate->format("Y-m-t"));
}
echo dateDiffCorrectMonth(date_create("2017-08-30"), "-6 month")->format("Y-m-d");
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости