Date Cakephp 3.2更改默认日期格式

Date Cakephp 3.2更改默认日期格式,date,cakephp,format,date-formatting,cakephp-3.2,Date,Cakephp,Format,Date Formatting,Cakephp 3.2,我尝试将CakePHP 3.2的默认日期格式从dd.mm.yyyyy设置为YYYY-mm-dd,这样我就不必使用$MyDatas->mydate->format('Y-m-d'),在编辑数据时,表单中更重要的是,我将日期设置为dd.mm.yyyyy(ex-27.02.2016)。我需要YYYY-mm-dd(2016-02-27) 我寻找解决方案,但没有显示任何更改(以表单形式或作为视图的一部分:$MyDatas->mydate): 上面的代码都没有帮助。有人知道我如何更改日期格式吗?我猜您已经升

我尝试将CakePHP 3.2的默认日期格式从
dd.mm.yyyyy
设置为
YYYY-mm-dd
,这样我就不必使用
$MyDatas->mydate->format('Y-m-d')
,在编辑数据时,表单中更重要的是,我将日期设置为
dd.mm.yyyyy
(ex-27.02.2016)。我需要
YYYY-mm-dd
(2016-02-27)

我寻找解决方案,但没有显示任何更改(以表单形式或作为视图的一部分:
$MyDatas->mydate
):


上面的代码都没有帮助。有人知道我如何更改日期格式吗?

我猜您已经升级到CakePHP 3.2,否则您会在
config/bootstrap.php
文件中看到
date
DATETIME
TIME
类型列有单独的类型

在CakePHP 3.2中,
date
类型不再映射到
Cake\I18n\Time
,而是映射到
\Cake\I18n\date
(或
\Cake\I18n\FrozenDate
类型,当指示使用不可变对象时,它需要单独配置,这就是更改
datetime
类型的原因,或者
\Cake\I18n\Time
类配置不会影响
日期

要为后者配置格式,请使用
\Cake\I18n\Date
和/或
\Cake\I18n\FrozenDate
类和
日期
类型。在引导程序中,您可以执行以下操作

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\u pl
locale时应用的默认值。请注意,您应该使用
yyyy
而不是
yyy
(后者定义了),以及
MM
而不是
MM
(后者定义了分钟)

有关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'),

您的所有日期都将更改为您的格式。 因为在 config/boostrap.php 上面写着

在蛋糕中结束\I18n将其设置为冻结日期

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

是类型为
DATE
DATETIME
的特定列吗?在MySQL中,我有:DATE\u start(日期),DATE\u end(日期)。对于数据库中日期为2016年2月27日的行,我从代码中清除AppController.php。我向bootstrap.php添加了您的解决方案,但它不起作用。但是,我通过删除->useImmutable():Type::build('date')->useLocaleParser()->setLocaleFormat('YYYY-MM-dd'),更改了您的Type::build('date')规则;成功了!THX@MasterAbe
useimummable()
不应以任何方式影响解析/格式化。但它确实。。。删除它会像我需要的那样格式化日期,但仅仅添加它不会改变日期格式。我在bootstrap和AppController中对其进行了测试。@MasterAbe抱歉,忘记了
\Cake\I18n\FrozenDate
Cake\I18n\Date
不共享相同的配置。我已经更新了我的答案。我做了所有这些配置,但它不起作用。当我在控制器中回显时,数据是正确的:2016年12月15日。但当它转到验证规则时,它会说这是一个无效的日期。我像你们说的那样进行了配置,但只是将格式更改为dd/MM/yyyy。仍然不起作用:(有解决方案吗?在进行规则验证之前,是否必须解析字符串以转换为日期类型?
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'pl_PL'),
ini_set('intl.default_locale', Configure::read('App.defaultLocale'));
protected static $_toStringFormat = [IntlDateFormatter::SHORT, -1];