Неправильно выводит дату - php

319
07 сентября 2017, 19:33

Непонятно, то ли баг, то ли работают эти методы по непонятной логике.

$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.

Подскажите, в чем состоит проблема и как ее решить? С другими датами норм. Из-за этого в скриптах расчета получаются косяки.

Answer 1

Это классическая проблема, связанная с различным количеством дней в месяцах, и решение зависит от результата, который мы хотим получить.

Представим, что у нас дата 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");
READ ALSO
Как изменить определить id товара?

Как изменить определить id товара?

Имеется массив Данные с API

259
Передача json строки

Передача json строки

Здравствуйте, необходимо передать json строку из одного файла php в другойВ первом файле прописала следующий код:

396
Создание ЧПУ для категорий сайта с помощью PHP

Создание ЧПУ для категорий сайта с помощью PHP

Подскажите, пожалуйста, как сделать с помощью PHP и БД так, чтобы новости на сайте отображались за принципом news/название_категории/название_статьи

314
Проблемы с кодировкой в БД [дубликат]

Проблемы с кодировкой в БД [дубликат]

На данный вопрос уже ответили:

315