Date Cakephp 3.2更改默认日期格式
我尝试将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): 上面的代码都没有帮助。有人知道我如何更改日期格式吗?我猜您已经升
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@MasterAbeuseimummable()
不应以任何方式影响解析/格式化。但它确实。。。删除它会像我需要的那样格式化日期,但仅仅添加它不会改变日期格式。我在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];