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

yalan 2015-04-22 03:42:01
话不多说,直接上代码:

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


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

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

另:如果把开始时间设置为2015-05-30计算结果是正确的
...全文
311 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-04-24
  • 打赏
  • 举报
回复
是的 不过请你注意:这不是 php 的规则,而是英语里时间计算的规则
yalan 2015-04-24
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
$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号? 我这样理解对吗?
yalan 2015-04-24
  • 打赏
  • 举报
回复
自己改了下算法,算是很好的解决了这个问题 虽然有很多方法,我还是坚持认为这是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然后计算月末最后一天
yooq_csdn 2015-04-23
  • 打赏
  • 举报
回复
取月末我一般用 下个月1日再减1天
ChanKalam 2015-04-23
  • 打赏
  • 举报
回复
bug?是你没把逻辑处理好
qq_26218997 2015-04-22
  • 打赏
  • 举报
回复
呵呵,加一个月,肯定是7月1日。 如果按照你的逻辑,加一天那不还得等于 5月31日?
yc8332 2015-04-22
  • 打赏
  • 举报
回复
你理解出错了!! 获取下个月最后一天有另外的语法的。
yalan 2015-04-22
  • 打赏
  • 举报
回复
哦,学习了 我还以为+1 months就是当月的下一个月 如果这样我认为还是php有bug,这种情况不应该进1位,而是应该返回6月的最后一天
xuzuning 2015-04-22
  • 打赏
  • 举报
回复
$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日吗 看来是你的经验出问题了

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧