Cakephp 3.2 更改默认日期格式

Cakephp 3.2 change default date format

我尝试将 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).

我寻找解决方案并 none 显示任何更改(在表单中或作为视图的一部分:$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

None 上面的代码有帮助。有谁知道如何更改日期格式?

我猜您已经升级到 CakePHP 3.2,否则您会在 config/bootstrap.php 文件中看到 DATEDATETIME 和 [=14 有不同的类型=] 类型列。

在 CakePHP 3.2 中,date 类型不再映射到 Cake\I18n\Time,而是映射到 \Cake\I18n\Date(或 \Cake\I18n\FrozenDate,当指示使用不可变对象时),并且它需要单独配置,这就是为什么更改 datetime 类型或 \Cake\I18n\Time class 配置不会影响您的 DATE 列。

要为后者配置格式,请使用 \Cake\I18n\Date and/or \Cake\I18n\FrozenDate class 和 date 类型。在你的bootstrap中,你可以做类似

的事情
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(后者定义分钟)。

请参阅 https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax 了解 CakePHP 内部使用的 intl 格式化程序所使用的格式。

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

另见

将此代码粘贴到此文件中 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'));

CakeDateFormat中根据需要设置日期格式。

经过大量搜索,我找到了。

在config/app.php下'App'=>[]

改变

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

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

并且您的所有日期都将更改为您的格式。 因为在 config/boostrap.php 它显示

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

在 cake\I18n FrozenDate 中结束,它设置为

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