2013-12-08 14 views
0

我從包含時間戳的數據庫中提取了大量記錄,即Cake的automagic created字段。我想按原樣存儲它們,但在某些控制器操作中,我希望將它們重新格式化爲「更友好」的格式。控制器中的CakePHP TimeHelper(或類似的)

是否有Cake方法用於更改日期時間格式而不更改其存儲方式?

感謝

編輯

我完全可以自己寫一個循環控制器來修改每一個返回的日期時間。我希望有一個更優雅的解決方案。

回答

1

你是對的,你應該將它們保存在數據庫中。

最簡單的方法是使用PHP的date()函數。例如。到輸出DD/MM/YYYY:

<?php echo date('d/m/Y', strtotime($your_datetime_field)); ?> 

對於在大型應用程序的一致性,則可能需要使用一箇中央源來格式化的時間,例如CakePHP的TimeHelper,所以你只需要在一個地方改變格式。我之前沒有使用這個幫助器,因爲我不需要經過PHP的內置函數,但它看起來像你仍然指定日期格式。我敢肯定,如果它沒有默認你喜歡的東西,那很容易修改它。該幫助程序的強大功能在於靈活的功能,輸出/返回選項和SQL兼容性選項。

它似乎對於大多數PHP內置功能來說實際上只是一個簡單的包裝,並且可以節省您的編碼時間。

E.g:

// inbuilt - get timestamp 
$timestamp = strtotime($yourdate); 
// cake helper 
$timestamp = $this->Time->fromString($yourdate); 

// inbuilt - get timestamp for 3 days away 
$timestamp = strtotime($yourdate . ' + 3 days'); 
// cake helper 
$timestamp = $this->Time->fromString('+3 days'); 

而且似乎是比較覈對日期是有用的。

文檔:

0

您可以格式化你的模型中的一個afterFind回調的日期。從CakePHP的手冊:

使用此回調修改已經從 查找操作返回的結果,或執行任何其他後發現邏輯。傳遞給此回調函數的$ results 參數包含從 模型的查找操作返回的結果。

例如,如果要更改日期格式,你可以這樣做,如:

public function afterFind($results, $primary = false) { 
    App::uses('CakeTime', 'Utility'); 
    foreach ($results as $key => $val) { 
     if (isset($val['Event']['created'])) { 
      $results[$key]['Event']['created'] = CakeTime::format($val['Event']['created'], '%d-%m-%Y'); 
     } 
    } 
    return $results; 
} 

正如你看到的,我用CakeTime實用程序來格式化日期。它和時間助手一樣,只要你可以在任何你想要的地方使用它。

1

可以在控制器加載CakeTime實用,
的caketime工具包含在CakeTime助手

App::uses('CakeTime', 'Utility'); 
CakeTime::timeAgoInWords('2014-04-01 00:15:20'); 
所有功能