欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

我勒个去,难道我发现了php的bug?计算下个月最后一天的问题!

程序员文章站 2022-06-06 20:17:57
...
话不多说,直接上代码:
$BeginDate="2015-05-31";//新的获取指定月份的最后1天echo date("Y-m-t",strtotime("+1 months",strtotime($BeginDate)));


根据经验,计算结果应该是:2015-06-30

但是实际运行结果不是,大家请试试,并求教大家这是为啥~~~~搞晕了我了

另:如果把开始时间设置为2015-05-30计算结果是正确的


回复讨论(解决方案)

$BeginDate="2015-05-31";echo date("Y-m-d t",strtotime("+1 months $BeginDate"));
2015-07-01 31

有什么问题吗?
5月31日加一个月(6月是30天)所以就是7月1日,7月的最后一天不就是31日吗
看来是你的经验出问题了

哦,学习了
我还以为+1 months就是当月的下一个月

如果这样我认为还是php有bug,这种情况不应该进1位,而是应该返回6月的最后一天

你理解出错了!!
获取下个月最后一天有另外的语法的。

呵呵,加一个月,肯定是7月1日。
如果按照你的逻辑,加一天那不还得等于 5月31日?

bug?是你没把逻辑处理好

取月末我一般用 下个月1日再减1天

自己改了下算法,算是很好的解决了这个问题
虽然有很多方法,我还是坚持认为这是PHP的一个bug,如同一楼说的,5月份有31天那么+1 months就是6月31,但是6月份有30天,所以结果是7月1号,那么这个strtotime的+1 months就是bug!

自己改的方法是:

$begindate="2015-05-31";$enddate=date("Y-m-01",strtotime($begindate));//获得月初$enddate=date("Y-m-t 23:59:59",strtotime("$enddate +1 month"));//月初加1 month然后计算月末最后一天

$BeginDate="2015-05-31";echo date("Y-m-d t",strtotime("+1 months $BeginDate"));
2015-07-01 31

有什么问题吗?
5月31日加一个月(6月是30天)所以就是7月1日,7月的最后一天不就是31日吗
看来是你的经验出问题了

请问PHP的加一个月是怎么计算的?5月31号加一个月的话就是简单的5月+1=6月31号?然后6月31号不存在所以计算结果是7月31号?

如果5月31号加一天就是5月32号,但是5月32号不存在就是6月1号?

我这样理解对吗?

是的
不过请你注意:这不是 php 的规则,而是英语里时间计算的规则