这个算strtotime("+1 month")的bug吗?

aiur 2007-10-10 02:22:32
我想写一个函数,返回传入日期的当月第一天和最后一天
$time = strtotime($init_date);
$year_temp = strftime("%Y",$time);
$month_temp = strftime("%m", $time);
//本月第一天
$start_date = date("Y-m-d",mktime(0,0,0,$month_temp,1,$year_temp));

$time = strtotime("+1 month",strtotime($init_date));
$year_temp = strftime("%Y",$time);
$month_temp = strftime("%m", $time);
$start_date1= mktime(0,0,0,$month_temp,1,$year_temp);
//通过下一个月的前一天,返回本月最后一天
$end_date = date("Y-m-d",strtotime("-1 day",$start_date1));

可是在测试的时候发现,如果传入$init_date = 1、3、5、8、10月的31号的时候,返回本月最后一天却是下一个月的最后一天!
比如传入2007-10-31,返回的是2007-11-30!
我看了下,主要原因可能是:这些月份的最后一天是31号,比下个月的最大天数都要大,在strtotime("+1 month")的时候,这个函数的返回值就跨越了两个月,而不是一个月!
请问各位,这个有什么解决的方法?或者是有什么好的方法得到本月的最后一天?谢谢!
...全文
550 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiur 2007-10-18
  • 打赏
  • 举报
回复
to askzhigang
由于有闰年的关系,2月份的最后一天是不固定的,所以用数组记录的方法我觉得不是很好。

现在我用date('t')解决了,谢谢大家!
ashchen 2007-10-12
  • 打赏
  • 举报
回复
一个月是按30天算的,的确应该算bug
总哈哈 2007-10-11
  • 打赏
  • 举报
回复
这样执行速度又快又简洁,那看你怎么取舍了.
总哈哈 2007-10-11
  • 打赏
  • 举报
回复
何必这么麻烦呢,你写一个数组里面记录1月到12月的每个月的第一天和最后一天,然后把传入的日期的月份取出来,然后在数组里面找不就可以了,不管上面的方法是否可行,我觉得没有必要.
dreambird1983 2007-10-10
  • 打赏
  • 举报
回复
同意楼上~~~~
lavaguo 2007-10-10
  • 打赏
  • 举报
回复
最后一天:date('t');
一个月的总天数,就是最后一天

21,886

社区成员

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

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