Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP strotime+;1个月增加一个月_Php_Date_Strtotime - Fatal编程技术网

PHP strotime+;1个月增加一个月

PHP strotime+;1个月增加一个月,php,date,strtotime,Php,Date,Strtotime,我有一个简单的变量,它将一个月添加到今天: $endOfCycle = date("Y-m", strtotime("+1 month")); 今天是2013年1月,所以我希望能回到2013-02年,但我要的是2013-03年。我不明白为什么要跳到三月。试试这个: $endOfCycle = date("Y-m", time()+2592000); 这增加了30天,而不是整整一个月。可能是因为它的2013-01-29所以+1个月将是2013-02-29,这是不存在的,所以它将是2013-03

我有一个简单的变量,它将一个月添加到今天:

$endOfCycle = date("Y-m", strtotime("+1 month"));
今天是2013年1月,所以我希望能回到2013-02年,但我要的是2013-03年。我不明白为什么要跳到三月。

试试这个:

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

这增加了30天,而不是整整一个月。

可能是因为它的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')))));

的评论中,这应该是

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

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

日期

返回使用给定整数时间戳或当前时间(如果未给定时间戳)根据给定格式字符串格式化的字符串

请参阅手册页面了解:


今天是1月29日,+1个月意味着工厂的29日,但由于今年2月有28天,所以它与第二天(3月1日)重叠

相反,尝试

strtotime('next month')

它跳到了3月份,因为今天是1月29日,加上一个月就是2月29日,而2月29日并不存在,所以它移动到了下一个有效日期

这也会发生在很多月份中的31号,但在1月到2月的情况下显然更为明显,因为2月较短

如果您对月的哪一天不感兴趣,只希望它给出下一个月的日期,那么应该将输入日期指定为当前月份的第一个日期。如果你加上一个月,这将总是给你正确的答案


出于同样的原因,如果您希望始终获得下个月的最后一天,则应首先计算所需日期后的第一个月,然后减去一天。

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

 $endOfCycle = date("Y-m", mktime(0, 0, 0, date("m", time())+1 , 15, date("m", time())));
$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

这只适用于特定日期。相对月份值是根据经过的月份长度计算的。例如,“2011-11-30年+2个月”,将产生“2012-01-30”。这是因为11月的长度为30天,12月的长度为31天,总共有61天。实际上,你应该以该月的15日为基准(或任何其他不接近月底的日期),然后重新调整到1日。这是一个痛苦,但是考虑使用一个月的第一作为基础,然后增加一个月,在某些情况下,下一个月在第三十一个月,而不是下个月的第一。在一个月中旬使用一个基础,你将永远不会得到意想不到的结果。如果失败,开发者在PHP土地上可以修复他们破坏的功能,我们就不必求助于任何一种方法。关键是把一个字符串转换成一个时间戳,而不是把它转换成一个最好的估计值,可能是下个月或上个月。请求下一个,得到下一个,请求最后一个,得到最后一个等等。。但是多年来这一直是一个难题,我看不到很快会有解决办法。那么
date('Y-m-d',strotime('下个月的最后一天'))
呢?这对我来说很有效…我可以确认上述工作^下个月的最后一天Hey@diegopso dude谢谢你,这正是我需要的