суббота, 20 апреля 2013 г.

php. Вычесть из даты год, месяц, или день

Для того что бы получить дату которая была какое то время назад, можно сделать так:

//вычитаем год
$date = new DateTime();
$date->modify('-1 year');
echo $date->format('Y-m-d H:i:s');

//вычитаем месяц
$date = new DateTime();
$date->modify('-1 month');
echo $date->format('Y-m-d H:i:s');

//вычитаем день
$date = new DateTime();
$date->modify('-1 day');
echo $date->format('Y-m-d H:i:s');



С добавлением оно так же работает, надо просто заменить - на +.


6 комментариев:

  1. То что надо, спасибо!

    ОтветитьУдалить
  2. стоит заметить, что если вам надо отнять несколько месяцев, то это будет некорректным, сли сегодня 31 число:


    // неправильно
    $date = new DateTime(); // сегодня 31 августа
    $date = $date->setDate(2015, 8, 31);
    $date->modify('-2 month');
    echo $date->format('Y-m-d H:i:s'); // выведет 2015-07-01 12:35:51

    правильно:
    $date = new DateTime(); // сегодня 31 августа
    $date = $date->setDate(2015, 8, 31);
    $date = $date->setDate($date->format('Y'), $date->format('m'), 1); // сбросили день месяца
    $date->modify('-2 month');
    echo $date->format('Y-m-d H:i:s'); // выведет 2015-06-01 12:36:49

    ОтветитьУдалить
    Ответы
    1. Что за бред? отнимаешь два месяца, а в результате получаешь минус 3 месяца.

      Удалить
  3. так ведь проще всё:
    $date = date("d/m/Y", strtotime("+4 hours"));
    или
    $date = date("d/m/Y", strtotime("-5 days"));

    ОтветитьУдалить
  4. $date->modify('-2 months'); // months во-множественном числе не должно быть?

    ОтветитьУдалить