Подтвердить что ты не робот

PHP strtotime +1 месяц, добавление дополнительного месяца

У меня есть простая переменная, которая добавляет один месяц к сегодняшнему дню:

$endOfCycle = date("Y-m", strtotime("+1 month"));

Сегодня январь 2013 года, поэтому я ожидаю, что вернусь к 2013-02, но вместо этого получаю 2013-03. Я не могу понять, почему он прыгает в марте.

4b9b3361

Ответ 1

Это прыгает в марте, потому что сегодня 29 января, а добавление месяца дает 29 февраля, которого не существует, поэтому он переходит к следующей допустимой дате.

Это произойдет и в течение 31-го числа месяцев, но, очевидно, будет более заметным в случае января-февраля, потому что фев-младший.

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

По той же причине, если вы хотите всегда получать последний день следующего месяца, вы должны начать с вычисления первого месяца после того, как вы хотите, и вычесть день.

Ответ 2

Это должно быть

$endOfCycle=date('Y-m-d', strtotime("+30 days"));

strtotime

ожидает, что будет предоставлена ​​строка, содержащая формат даты в формате US English, и попытается проанализировать этот формат в временную метку Unix (количество секунд с 1 января 1970 года 00:00:00 по UTC) по сравнению с меткой времени, указанной в настоящее время, или текущее время, если теперь не предоставляется.

, а

date

Возвращает строку, форматированную в соответствии с заданной строкой формата, используя заданную метку времени или текущее время, если не указана метка времени.

См. страницы руководства для:

Ответ 3

Вы можете использовать этот код для получения следующего месяца:

$ts = mktime(0, 0, 0, date("n") + 1, 1);
echo date("Y-m-d H:i:s", $ts);
echo date("n", $ts);

Предполагая, что сегодня есть 2013-01-31 01:23:45, это вернет:

2013-02-01 00:00:00
2

Ответ 4

сегодня - 29 января, +1 месяц означает 29-е февраля, но поскольку февраль состоит из 28 дней в этом году, он накладывается на следующий день, который 1 марта.

вместо этого попробуйте

strtotime('next month')

Ответ 5

Может быть, потому что его 2013-01-29 так +1 месяц будет в 2013-02-29, которого не существует, так что это будет 2013-03-01

Вы можете попробовать

date('m/d/y h:i a',(strtotime('next month',strtotime(date('m/01/y')))));

из комментариев http://php.net/manual/en/function.strtotime.php

Ответ 6

 $endOfCycle = date("Y-m", mktime(0, 0, 0, date("m", time())+1 , 15, date("m", time())));

Ответ 7

попробуйте следующее:

$endOfCycle = date("Y-m", time()+2592000);

это добавляет 30 дней, а не ровно месяц.