2016-02-27 204 views
2

我嘗試將CakePHP 3.2的默認日期格式從dd.mm.YYYY設置爲YYYY-mm-dd,因此我將不必使用$MyDatas->mydate->format('Y-m-d'),並且在編輯數據時我將使用格式更重要的日期格式dd.mm.YYYY(前27.02.2016)。我需要YYYY-mm-dd(2016-02-27)。Cakephp 3.2更改默認日期格式

我尋找解決方案和無顯示器的任何改變(在形式或作爲視圖的一部分:$MyDatas->mydate):上述

// in AppController 

ini_set('intl.default_locale', 'pl_PL'); 

//and/or 

use Cake\Database\Type; 
Type::build('datetime')->useLocaleParser()->setLocaleFormat('YYYY-mm-dd'); 

//and/or 

use Cake\I18n\I18n; 
I18n::locale('pl_PL'); 

//and/or 

use Cake\I18n\Time; 
Time::$defaultLocale = 'pl-PL'; //and or 
Time::setToStringFormat('YYYY-mm-dd HH:mm');//and or 
Type::build('datetime')->useLocaleParser(false);//and or 

的代碼無幫助。有誰知道如何改變日期格式?

+0

是類型DATE',或'DATETIME'的'具體列?我有MySQL的 – ndm

+0

:date_start(日期),date_end(日期)。對於DB中的行where date_start ='2016-02-27'cake will display 27.02.2016 – MasterAbe

回答

8

我想你已經升級到3.2 CakePHP的,否則你會看到在你的文件,有獨立的類型DATEDATETIMETIME類型列。

使用CakePHP 3.2 date類型不MAPE到Cake\I18n\Time了,但到\Cake\I18n\Date(或\Cake\I18n\FrozenDate當指示使用不可變對象),並且它需要被分開地構造,這是爲什麼改變datetime類型或\Cake\I18n\Time class config不會影響您的DATE列。

要配置後者的格式,請使用\Cake\I18n\Date和/或\Cake\I18n\FrozenDate類和date類型。在你的引導,你可以不喜歡

ini_set('intl.default_locale', 'pl_PL'); 

// ... 

Cake\I18n\Date::setToStringFormat('yyyy-MM-dd'); 
Cake\I18n\FrozenDate::setToStringFormat('yyyy-MM-dd'); 

\Cake\Database\Type::build('date') 
    ->useImmutable() 
    ->useLocaleParser() 
    ->setLocaleFormat('yyyy-MM-dd'); 

這將覆蓋使用pl_PL區域時被應用的默認值。請注意,您應該使用yyyy而不是YYYY(因爲後者定義了week-numbering year)和MM而不是mm(因爲後者定義了分鐘)。

請參閱http://www.icu-project.org/apiref/icu4c/classSimpleDateFormat.html#details瞭解CakePHP內部使用的intl格式化程序使用的格式。

另請注意,還有\Cake\I18n\Date::$wordFormat\Cake\I18n\Date:$niceFormat,您可能也想更改它。

又見

+0

我從我的代碼清理我的AppController.php。我添加到bootstrap.php您的解決方案,它不起作用。不過,我通過刪除 - > useImmutable()來更改Type :: build('date')規則:它的工作! THX – MasterAbe

+0

@MasterAbe useImmutable()不應以任何方式影響解析/格式。 – ndm

+0

但它確實...刪除它格式日期,如我需要,但只是添加它不會使日期格式的變化。我在bootstrap和AppController中測試了它。 – MasterAbe

0

在這個文件config/site.php這個代碼粘貼:

return [ 
'Site' => [  
     'CakeDateFormat' => 'Y-M-d', 
     'DatePickerFormat' => 'mm/dd/yyyy', 
     'CakeDateFormatForView' => 'm/d/Y',   
    ] 
] 

使用此日期格式控制器:

use Cake\I18n\Time; 

$this->request->data['date'] =Time::parseDate($this->request->data['date'], Configure::read('Site.CakeDateFormat')); 

設置根據日期格式你的n請參閱CakeDateFormat

4

經過大量搜索我發現。

在配置/ app.php下 '應用'=> []

變化

'defaultLocale' => env('APP_DEFAULT_LOCALE', 'us_US'), 

'defaultLocale' => env('APP_DEFAULT_LOCALE', 'pl_PL'), 

和所有的日期將變更爲您的格式。 因爲 配置/ boostrap.php 它在蛋糕閱讀

ini_set('intl.default_locale', Configure::read('App.defaultLocale')); 

末\的I18n FrozenDate將其設置爲

protected static $_toStringFormat = [IntlDateFormatter::SHORT, -1];