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)。

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

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

4

3 回答 3

8

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

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

要为后者配置格式,请使用\Cake\I18n\Dateand/or\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(因为后者定义了周编号 year),而MM不是mm(因为后者定义了分钟)。

有关CakePHP 内部使用的 intl 格式化程序使用的格式,请参见https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax 。

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

也可以看看

于 2016-02-28T00:22:01.793 回答
4

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

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

改变

'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'));

以蛋糕结尾\I18n FrozenDate 它设置为

protected static $_toStringFormat = [IntlDateFormatter::SHORT, -1];
于 2016-10-20T08:41:10.670 回答
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'));

根据您的需要设置日期格式CakeDateFormat

于 2016-05-30T13:55:16.593 回答