我認爲日期模塊會給你的API調用來做到這一點。
在我的情況,我的要求是相當簡單的,我不想創建一個額外的模塊依賴,所以我用下面形成一個PHP DateTime對象:
$date_arr = $form_state['values']['date'];
if ($date_arr['year'] && $date_arr['month'] && $date_arr['day']) {
$date = new DateTime();
$date->setDate($date_arr['year'], $date_arr['month'], $date_arr['day']);
} else {
$date = NULL;
}
要存儲在數據庫中(作爲UNIX時間戳,就像Drupal慣例一樣),我使用$ date-> getTimestamp()。
我並不需要把日期回形式,但如果我這樣做,我會嘗試這樣的:
$query = db_query("select mydate from table");
while ($fields = db_fetch_array($query)) {
$date = new DateTime();
$date->setTimestamp($fields[0]);
$form['order']['date'] = array(
'#type' => 'date',
'#title' => 'Order date',
'#default_value' => array(
year => $date->format('Y'),
month => $date->format('m'),
day => $date->format('d'),
),
);
}
我沒有測試過這一點,所以你需要進行試驗。
希望這會有所幫助!
這將是一個非常糟糕的主意,如果你需要對日期做任何事情,比如最近10次,全部來自11月份等。這可以用SQL來完成,但是如果你序列化日期而不是將它保存爲一個日期。 – googletorp 2010-11-27 21:16:51
是的,需要ORDER BY`date`。 – 2010-11-28 06:07:20
是的,壞主意。另外:你應該總是編程到一個界面。在你的表單API中有這樣的事情不會促進重用和可讀性。使用一些幫助函數來處理格式並在表單中委託給它們。 – Rimian 2010-11-28 10:43:15