strtotime возвращает неверную временную метку для '-1 month'

Я использую поле даты CCK. strtotime в конце Mart (> = 29 марта) вернет неверный результат для strtotime ('1- month').

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

Есть идеи ?

Это счетчик интуитивно понятен, но:

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

По той же причине:

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

Я не знаю, как получить «тот же день последний / следующий месяц», используя относительные форматы даты / времени PHP .

Мое решение

 /* * 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("Ymd h:m:s", strtotime($relevantYear .'-'. $relevantMonth)); break; } } 

Я не знаком с drupal, но вы можете использовать что-то вроде:

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

чтобы дать вам день в прошлом месяце, и если он превысит общее количество дней, то с 30-го февраля он вернется вниз, используя функцию min min (28).