:

PHP 关于strtotime("- x month") bug的解决

song100e 发布于:2015-12-11 17:24 分类:PHP  有 1154 人浏览,获得评论 0 条 标签: strtotime 

strtotime('-x month'); 在涉及到月份修改的时候,可能不会得到预料的结果。
此为php的一个bug:

https://bugs.php.net/bug.php?id=27793

<?php
// 如:当前时间为: 2014-08-31 17:21:22
date_default_timezone_set('Asia/Shanghai');
$t = time();
print_r(array(
	date('Y年m月',$t),
	date('Y年m月',strtotime('- 1 month',$t)),
	date('Y年m月',strtotime('- 2 month',$t)),
));
?>
上面代码输出:
Array
(
    [0] => 2014年08月
    [1] => 2014年07月
    [2] => 2014年07月
)
而预期的结果是:
Array
(
    [0] => 2014年08月
    [1] => 2014年07月
    [2] => 2014年06月
)


============================================
 
可以用如下方法解决:
<?php
date_default_timezone_set('Asia/Shanghai');
$first_day_of_month = date('Y-m',time()) . '-01 00:00:01';
$t = strtotime($first_day_of_month);
print_r(array(
	date('Y年m月',$t),
	date('Y年m月',strtotime('- 1 month',$t)),
	date('Y年m月',strtotime('- 2 month',$t)),
));
?>
输出:
Array
(
    [0] => 2014年08月
    [1] => 2014年07月
    [2] => 2014年06月
)

赞助我,共同学习进步!