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

php中文网
发布: 2016-06-23 13:36:03
原创
1207人浏览过

话不多说,直接上代码:

$BeginDate="2015-05-31";//新的获取指定月份的最后1天echo date("Y-m-t",strtotime("+1 months",strtotime($BeginDate)));
登录后复制


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

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

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

有道小P
有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64
查看详情 有道小P

回复讨论(解决方案)

$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 的规则,而是英语里时间计算的规则

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号