strtotime返回'-1 month'的错误时间戳

时间:2011-03-29 22:44:21

标签: php date

我使用的是CCK日期字段。在Mart结束时的strtotime(> = 3月29日)将返回strtotime('1 - 月')的错误结果。

// Current date Mar 30
$time = strtotime('-1 month');
print date('m/d/Y', $time);

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这是违反直觉的,但是:

03/30/2011 - 1 month = 02/30/2011 => 03/02/2011

出于同样的原因:

03/31/2011 + 1 month = 04/31/2011 => 05/01/2011

我无法使用relative date/time formats of PHP获取“上一个/下个月的同一天”。

答案 1 :(得分:0)

我的解决方案

/*
 * Implementation of hook_form_alter().
 */
function report_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case AUTO_REPORT_NODE_FORM:
      // Fix bug with strtotime('-1 month')
      $currentYear  = date('Y');
      $currentMonth = date('n');
      if($currentMonth == 1){
        $relevantMonth = 12;
        $relevantYear = $currentYear -1;
      }
      else{
        $relevantMonth = $currentMonth - 1;
        $relevantYear = $currentYear;
      }
      $form['field_datestamp'][0]['#default_value']['value'] = date("Y-m-d h:m:s", strtotime($relevantYear .'-'. $relevantMonth));
      break;
  }
}

答案 2 :(得分:0)

我不熟悉drupal,但你可以使用类似的东西:

min(date('t'), date('d')); // would yield 28 on March 30th

给你上个月的日子,如果它超过了总天数,那么从2月30日开始它将使用min函数min(28)返回。