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

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
417
Реакции
49
Столкнулся с интересной задачей, вот сегодня 29 марта, как корректно вычислить какое число было месяц назад?
 
месяц назад в любом случае будет так же 29, но если выпадает на февраль, то смотрим високосный год или нет
PHP:
$lastMonth = date('n')-1;

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

verfaa, Скорее всего strtotime("-1 month") даст вам то, что нужно
PHP:
strtotime("-1 month")
strtotime("-1 month",time())
 
Последнее редактирование модератором:
Для просмотра ссылки Войди или Зарегистрируйся
PHP:
$lastmonth = mktime(0, 0, 0, date("m"), date("d")-30, date("Y"));
//или
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
Я думаю должно посчитать само все правильно.
 
Последнее редактирование модератором:
Есть еще один интересный способ, который со временем станет более востребован из-за проблемы 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_cur, date_interval_create_from_date_string('30 days'));
$date_in_past2 = date_sub($date_cur2, date_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");

В общем будьте осторожны с вычислением дат :)

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