Если сегодня 29 марта, как вычислить число которое было месяц назад?

Тема в разделе "Как сделать...", создана пользователем verfaa, 29 мар 2014.

Статус темы:
Закрыта.
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    Столкнулся с интересной задачей, вот сегодня 29 марта, как корректно вычислить какое число было месяц назад?
     
  2. MadChild

    MadChild Постоялец

    Регистр.:
    23 янв 2013
    Сообщения:
    72
    Симпатии:
    5
    месяц назад в любом случае будет так же 29, но если выпадает на февраль, то смотрим високосный год или нет
    PHP:
    $lastMonth date('n')-1;

    if(
    date('L') == && $lastMonth==&& date('j')>28){
    $day=28;
    }
    elseif(
    date('L') == && $lastMonth==&& date('j')>29){
    $day=29;
    }
    а если вам надо вычесть 30 дней, то от текущей даты отнимаем 2592000
     
    Последнее редактирование модератором: 27 май 2014
  3. zaregan

    zaregan Постоялец

    Регистр.:
    12 авг 2009
    Сообщения:
    70
    Симпатии:
    41
    MadChild, есть также 31 число.. и декабрь..

    verfaa, Скорее всего strtotime("-1 month") даст вам то, что нужно
    PHP:
    strtotime("-1 month")
    strtotime("-1 month",time())
     
    Последнее редактирование модератором: 27 май 2014
    latteo нравится это.
  4. Sercib

    Sercib Создатель

    Регистр.:
    2 май 2008
    Сообщения:
    19
    Симпатии:
    1
    http://www.php.net/manual/ru/function.date.php
    PHP:
    $lastmonth mktime(000date("m"), date("d")-30date("Y"));
    //или
    $lastmonth mktime(000date("m")-1date("d"), date("Y"));
    Я думаю должно посчитать само все правильно.
     
    Последнее редактирование модератором: 27 май 2014
  5. Sciphoshee

    Sciphoshee Писатель

    Регистр.:
    15 май 2014
    Сообщения:
    2
    Симпатии:
    2
    Есть еще один интересный способ, который со временем станет более востребован из-за проблемы 2038 года, ну и если вы уже сейчас работаете с датами больше этого года, то вполне себе актуально может оказаться. Суть в том что бы использовать DateTime класс доступный с PHP версии 5.2 (а некоторые методы добавили только в 5.3).
    Пример решения вашей задачи:
    PHP:
    $date_cur date_create("2014-03-29");
    $date_cur2 date_create("2014-03-29");

    $date_in_past1 date_sub($date_curdate_interval_create_from_date_string('30 days'));
    $date_in_past2 date_sub($date_cur2date_interval_create_from_date_string('1 month'));

    echo 
    date_format($date_in_past1"Y-m-d");
    echo 
    '<br>';
    echo 
    date_format($date_in_past2"Y-m-d");
    В общем будьте осторожны с вычислением дат :)

    Пример написал в процедурном стиле, хотя есть возможность писать и в объектно-ориентированном.
     
    Последнее редактирование модератором: 27 май 2014
Статус темы:
Закрыта.