Я использую поле даты 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).