PHP strtotime +1个月增加一个月

时间:2013-01-29 13:30:15

标签: php date strtotime

我有一个简单的变量,它在今天增加了一个月:

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

今天是2013年1月,所以我希望能够回到2013-02,但我将获得2013-03。我无法弄清楚为什么它会跳到三月。

7 个答案:

答案 0 :(得分:21)

它跳到3月是因为今天是1月29日,并且在2月29日添加了一个月,这是不存在的,所以它将进入下一个有效日期。

这也将在很多个月的第31个月发生,但在1月到2月的情况下显然更为明显,因为2月较短。

如果您对月中的某一天不感兴趣而只是希望它在下个月提供,则应将输入日期指定为当月的第一个月。如果您添加一个月,这将始终为您提供正确的答案。

出于同样的原因,如果你想总是得到下个月的最后一天,你应该先计算你想要的月份之后的第一天,然后减去一天。

答案 1 :(得分:16)

这应该是

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

<强> strtotime

期望给出一个包含美国英语日期格式的字符串,并尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数),相对于现在给出的时间戳,或者如果现在没有提供当前时间。

<强>而

<强> date

使用给定的整数时间戳返回根据给定格式字符串格式化的字符串,如果没有给出时间戳,则返回当前时间。

请参阅手册页:

答案 2 :(得分:4)

您可以使用此代码获取下个月:

$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

答案 3 :(得分:2)

今天是1月29日,+ 1月意味着2月29日,但因为2月份是今年28天,所以重叠到3月1日的第二天

而不是尝试

strtotime('next month')

答案 4 :(得分:1)

也许是因为它的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

的评论

答案 5 :(得分:-1)

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

答案 6 :(得分:-2)

试试这个:

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

这增加了30天,而不是一个月的艰难。