2011-03-29 111 views
2

我已使用CCK日期字段。在瑪特(> = = 3月29日)結束時的時間將返回不正確的結果作爲時間('1個月')。strtotime返回'-1個月'的不正確時間戳

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

任何想法?

+2

這不是一個Drupal問題,它與所有的PHP都有關。 – 2011-03-29 23:42:44

+2

雖然使用date()函數不是Drupal特定的,但重要的是要注意,對於Drupal中的大多數用途,應該使用format_date()函數(http://api.drupal.org/api/drupal /includes--common.inc/function/format_date),以便考慮時區和其他Drupal特定的配置。 – jhedstrom 2011-03-30 01:49:44

+0

我已經使用CCK日期字段。 – dobeerman 2011-03-30 01:55:44

回答

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

+0

但'上個月'也返回不正確的結果。沒有辦法在CCK日期字段中設置默認值;(Google也是無聲的 – dobeerman 2011-03-29 23:25:35

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; 
    } 
} 
0

我不是那熟悉的Drupal,但你可以使用類似:

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

給你的那一天最後一個月,如果超過了總數天,例如2月30日,它將使用min函數min(28)回落。