2016-02-27 2 views
2

Я пытаюсь установить формат даты по умолчанию CakePHP 3.2 от dd.mm.YYYY до YYYY-mm-dd, поэтому мне не нужно будет использовать $MyDatas->mydate->format('Y-m-d'), а что более важно в формах при редактировании данных. Я буду иметь дату в формате dd.mm.YYYY (ex-27.02.2016). Мне нужно YYYY-mm-dd (2016-02-27).Cakephp 3.2 изменить формат даты по умолчанию

Я искал решений и ни один дисплей каких-либо изменений (в формах или как часть зрения: $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 

Ни один из кода выше не помогло. Кто-нибудь знает, как я могу изменить формат даты?

+0

ли конкретные столбцы типа 'date' или' DATETIME'? – ndm

+0

в MySQL у меня: date_start (DATE), date_end (DATE). Для строк в БД, где date_start = '2016-02-27' будет отображаться торт 27.02.2016 – MasterAbe

ответ

8

Я думаю, вы были обновления до CakePHP 3.2, в противном случае вы бы видели в файле , что существуют отдельные типы для столбцов типа DATE, DATETIME и TIME.

С CakePHP 3.2 date типа не МАПО к Cake\I18n\Time больше, но \Cake\I18n\Date (или \Cake\I18n\FrozenDate, когда предписано использовать неизменные объекты), и она должна быть настроена отдельно, поэтому изменение datetime типа, или \Cake\I18n\Time Конфигурация класса не влияет на колонки DATE.

Чтобы настроить форматирование для последних, используйте классы \Cake\I18n\Date и/или \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 (поскольку последний определяет week-numbering year) и MM вместо mm (так как последний определяет минуты).

См. http://www.icu-project.org/apiref/icu4c/classSimpleDateFormat.html#details для формата, используемого встроенным форматированием, который CakePHP использует внутри.

Также обратите внимание, что есть также \Cake\I18n\Date::$wordFormat и \Cake\I18n\Date:$niceFormat, которые вы также можете изменить.

Смотрите также

+0

Я очищаю свой AppController.php из своего кода. Я добавляю к bootstrap.php ваше решение, и оно не работает. Однако я изменил правило Type :: build ('date'), удалив -> useImmutable(): Type :: build ('date') -> useLocaleParser() -> setLocaleFormat ('YYYY-MM-dd'); и это сработало! THX – MasterAbe

+0

@MasterAbe 'useImmutable()' не должен влиять на разбор/форматирование каким-либо образом. – ndm

+0

, но он делает ... удаление форматов даты, как мне нужно, но просто добавление не изменит формат даты. Я тестировал его в бутстрапе и в AppController. – MasterAbe

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

Установите формат даты в соответствии к вашему n в CakeDateFormat.

4

после многого поиска я нашел.

В конфигурации/app.php под 'App' => []

изменения

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

в

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

и все ваши даты изменится форматирование. потому что в конфигурации/boostrap.php он прочитал

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

конец в торт \ I18n FrozenDate он установлен

protected static $_toStringFormat = [IntlDateFormatter::SHORT, -1]; 
Смежные вопросы