James 发表于 2017-4-5 11:48:21

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

  strtotime('-x month'); 在涉及到月份修改的时候,可能不会得到预料的结果。
  此为php的一个bug:
  https://bugs.php.net/bug.php?id=27793
  如:当前时间为: 2011-08-31 17:21:22
  <?php

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

(

    => 2011年08月

    => 2011年07月

    => 2011年07月

)
  而预期的结果是:
  Array

(

    => 2011年08月

    => 2011年07月

    => 2011年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

(

    => 2011年08月

    => 2011年07月

    => 2011年06月

)
页: [1]
查看完整版本: PHP 关于strtotime("- x month") bug的解决