2016-02-27 202 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];