strtotime возвращает неверную метку времени для «-1 месяца» - PullRequest
2 голосов
/ 30 марта 2011

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

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

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Это противоречит интуиции, но:

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

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

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

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

0 голосов
/ 31 мая 2012

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

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

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

0 голосов
/ 30 марта 2011

Мое решение

/*
 * 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...