您在這裡

[程式設計] 如何實作一個 西元年 以 民國年 呈現 的 date widget ?

bobju's 的頭像
bobju 在 2011-12-28 (三) 15:32 發表

如標題, 主要是 表單輸入 時要用的, 下拉式選單即可. 例如客戶的生日: [May] [05] [1990], 這個 [1990] 是否能以 [民國79年] 呈現?

原以為只是一個[轉換]而已, 應該[很簡單]才對, 想不到找了很多資料, 到目前為止, 心中仍然沒譜.

被這小問題卡了好幾天, 想了好久, 想閃又閃不掉, 真是太可怕了. :P

敬請賜教, 哪怕只是一個 key 也行, 謝謝.

終於找到了: http://drupal.org/node/1165138
關鍵在於 #after_build

<?php
function cotract_form(){
$form['member']['m_birthday'] = array(
'#title' => t('會員生日'),
'#type' => 'date',
'#description' => t('請填入會員出生年月日.'),
'#required' => TRUE,
'#after_build' => array("contract_format_dob"), // 指定要對此 表單元素 進行 再處理 的 callback 函式
);
return $form;
}

/*
* 嘿~ 照過來照過來
*/
function contract_format_dob($form_element, &$form_state){

$max_age = date('Y') - 99;
$min_age = date('Y') - 0;

$form_element['year']['#options'] = array();
foreach (range($max_age, $min_age) as $year){
$form_element['year']['#options'][$year] = sprintf("民國%03d年",$year-1911);
}

//2012-01-10 修訂: key的格式要用數字才行, 不能用'Jan', 'Feb'.... 這跟 date 的資料格式有關.
$form_element['month']['#options'] = array(
'1' => ' 元月',
'2' => ' 二月',
'3' => ' 三月',
'4' => ' 四月',
'5' => ' 五月',
'6' => ' 六月',
'7' => ' 七月',
'8' => ' 八月',
'9' => ' 九月',
'10' => ' 十月',
'11' => '十一月',
'12' => '十二月',
);

return $form_element;
}
?>