PHP strtotime计算月份

今天同事发现了一个php的月份bug,说月份列表里怎么出现了两个3月份,代码是大概是这样的:

$month[]=date('Y年m月',strtotime('today'));
$month[]=date('Y年m月',strtotime('-1 month'));
$month[]=date('Y年m月',strtotime('-2 month'));
$month[]=date('Y年m月',strtotime('-3 month'));
$month[]=date('Y年m月',strtotime('-4 month'));
$month[]=date('Y年m月',strtotime('-5 month'));

利用strtotime来计算最近了六个月份,这个bug之前没有被发现因为只有在每月的29,30,31号才会发作:因为php默认取当前时间来做计算,比如今天7月29号减去5个月应该是2月29号,因为今年的2月份没有29号,所以就到了3月份了。于是修改了下:

$month[]=date('Y年m月',strtotime('today'));
$month[]=date('Y年m月',strtotime('first day of -1 month'));
$month[]=date('Y年m月',strtotime('first day of -2 month'));
$month[]=date('Y年m月',strtotime('first day of -3 month'));
$month[]=date('Y年m月',strtotime('first day of -4 month'));
$month[]=date('Y年m月',strtotime('first day of -5 month'));

但是这个只有在php 5.3以上的版本中才会起作用,在php 5.2的版本有bug,需要这样处理:

$month[]=date('Y年m月',strtotime('today'));
$month[]=date('Y年m月',mktime(0,0,0,date('n')-1,1,date('Y')));
$month[]=date('Y年m月',mktime(0,0,0,date('n')-2,1,date('Y')));
$month[]=date('Y年m月',mktime(0,0,0,date('n')-3,1,date('Y')));
$month[]=date('Y年m月',mktime(0,0,0,date('n')-4,1,date('Y')));
$month[]=date('Y年m月',mktime(0,0,0,date('n')-5,1,date('Y')));

参考链接:
php strtotime函数
Version difference for strtotime(‘first day of last month’)?

发表评论

电子邮件地址不会被公开。 必填项已用*标注