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
文件中看到 DATE
、DATETIME
和 [=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
,您可能也想更改它们。
另见
- Source > cakephp/app > config/bootstrap.php
- API > \Cake\I18n\DateFormatTrait::i18nFormat()
- API > \Cake\I18n\Date::$wordFormat
- API > \Cake\I18n\Date::$niceFormat
- Cookbook > Date & Time > Immutable Dates and Times
- Cookbook > Date & Time > Setting the Default Locale and Format String
- Cookbook > Internationalization & Localization > Parsing Localized Datetime Data
将此代码粘贴到此文件中 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];
我尝试将 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
文件中看到 DATE
、DATETIME
和 [=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
,您可能也想更改它们。
另见
- Source > cakephp/app > config/bootstrap.php
- API > \Cake\I18n\DateFormatTrait::i18nFormat()
- API > \Cake\I18n\Date::$wordFormat
- API > \Cake\I18n\Date::$niceFormat
- Cookbook > Date & Time > Immutable Dates and Times
- Cookbook > Date & Time > Setting the Default Locale and Format String
- Cookbook > Internationalization & Localization > Parsing Localized Datetime Data
将此代码粘贴到此文件中 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];