我已使用CCK日期字段。在瑪特(> = = 3月29日)結束時的時間將返回不正確的結果作爲時間('1個月')。strtotime返回'-1個月'的不正確時間戳
// Current date Mar 30
$time = strtotime('-1 month');
print date('m/d/Y', $time);
任何想法?
我已使用CCK日期字段。在瑪特(> = = 3月29日)結束時的時間將返回不正確的結果作爲時間('1個月')。strtotime返回'-1個月'的不正確時間戳
// 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
沒有辦法,我知道拿到「當天最後一個/下一個月的」使用relative date/time formats of PHP 。
但'上個月'也返回不正確的結果。沒有辦法在CCK日期字段中設置默認值;(Google也是無聲的 – dobeerman 2011-03-29 23:25:35
我的解決方案
/*
* 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;
}
}
我不是那熟悉的Drupal,但你可以使用類似:
min(date('t'), date('d')); // would yield 28 on March 30th
給你的那一天最後一個月,如果超過了總數天,例如2月30日,它將使用min函數min(28)回落。
這不是一個Drupal問題,它與所有的PHP都有關。 – 2011-03-29 23:42:44
雖然使用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
我已經使用CCK日期字段。 – dobeerman 2011-03-30 01:55:44