我有一个简单的变量,它在今天增加了一个月:
$endOfCycle = date("Y-m", strtotime("+1 month"));
今天是2013年1月,所以我希望能够回到2013-02,但我将获得2013-03。我无法弄清楚为什么它会跳到三月。
答案 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')))));
的评论
答案 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天,而不是一个月的艰难。