2015-05-29 101 views
0

給定一個在不同時區運行的Web應用程序,有沒有CakePHP 2.x dateTime輸入的方法來顯示在編輯時顯示給用戶的值,以便在他們的時區中。CakePHP 2.6 DateTime輸入和用戶時區

例如,如果我有一個存儲在數據庫中的記錄(表示appointment_date(將在UTC時區中)),如果我作爲時區America/Jamaica中的用戶,我想要編輯該記錄,並在輸入時顯示我的值區域,就像我這樣做時:

<?php echo $this->Form->dateTime('appointment_date'); ?> 

當然,我們假設我們將在保存前轉換回UTC時區。

+0

當你說「在他們的時區顯示」你的意思是時間下拉列表中的默認值顯示我的本地時間(而不是UTC)? – robmcvey

+0

是正確的,但請注意這將是記錄的「現有」值。想象一下,編輯一個名爲appointment_date的字段(最初以db的形式保存爲UTC) – antoniovassell

回答

0

我在這裏創建了一個要點:https://gist.github.com/antoniovassell/fed29e782be33b7eb5ab 它允許使用擴展FormHelper的自定義助手類來處理dateTime輸入時區轉換的抽象方法。

public function dateTime($fieldName, $dateFormat = 'DMY', $timeFormat = '12', $attributes = array()) { 
     $attributes = parent::value($attributes, $fieldName); 
     if (!empty($attributes['value'])) { 
      $attributes['value'] = CakeTime::format('Y-m-d H:i:s', $attributes['value']); 
     } 
     return parent::dateTime($fieldName, $dateFormat, $timeFormat, $attributes); 
    } 

因此,除了使用TimeHelper手動轉換形式值用戶時區,然後將該值設置爲輸入,我們可以通過覆蓋表單DATETIME函數自動執行此。只要我們撥打echo $this->Form->dateTime('my_field');,我們就會自動執行此操作。