我使用的是CCK日期字段。在Mart结束时的strtotime(> = 3月29日)将返回strtotime('1 - 月')的错误结果。
// Current date Mar 30
$time = strtotime('-1 month');
print date('m/d/Y', $time);
有什么想法吗?
答案 0 :(得分: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获取“上一个/下个月的同一天”。
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
我不熟悉drupal,但你可以使用类似的东西:
min(date('t'), date('d')); // would yield 28 on March 30th
给你上个月的日子,如果它超过了总天数,那么从2月30日开始它将使用min函数min(28)返回。