我在AppController中使用过它:
Time::setToStringFormat('dd/MM/YYYY');
我的表单中的日期字段是输入类型" text"允许我的用户写一些类似 2015年12月31日的内容。
然而,当我尝试保存(MySQL日期)时,我收到了一些时间等级的错误,因为在表格中现在的值是00-00-0000
谢谢!
答案 0 :(得分:3)
我的最终解决方案是在bootstrap:
date_default_timezone_set('America/Sao_Paulo');
setlocale(LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'pt_BR.utf-8', 'portuguese');
Type::build('time')->useImmutable();
Type::build('date')->useImmutable()->useLocaleParser();
Type::build('datetime')->useImmutable()->useLocaleParser();
Type::build('timestamp')->useImmutable();
\Cake\I18n\Time::setToStringFormat('dd/MM/yyyy HH:mm:ss');
\Cake\I18n\Date::setToStringFormat('dd/MM/yyyy');
\Cake\I18n\FrozenTime::setToStringFormat('dd/MM/yyyy HH:mm:ss');
\Cake\I18n\FrozenDate::setToStringFormat('dd/MM/yyyy');
\Cake\I18n\I18n::locale('pt-BR'); //new !
Type::build('decimal')->useLocaleParser();
Type::build('float')->useLocaleParser();
答案 1 :(得分:1)
如果您只是使用新数据库创建新应用程序,则删除具有0000-00-00的日期并更改列定义,以便它可以接受空值。在日期中使用0000-00-00通常是一件非常糟糕的事情,因为只有错误和错误可以来自它:)
根据以下评论进行修改
似乎问题是要将字符串字段从本地日期格式解析为php可以理解的内容。对于此任务,您只需配置DateTimeType
类以使用区域设置感知格式解析日期,如此处所述http://book.cakephp.org/3.0/en/orm/database-basics.html#parsing-localized-datetime-data
// In bootstrap.php or AppController or your controller action:
use Cake\Database\Type;
...
Type::build('datetime')->useLocaleParser();
您还可以设置区域设置解析器以解析特定格式。要使上述代码生效,请确保将应用程序设置为使用区域设置:
I18n::locale('fr-FR')
答案 2 :(得分:1)
模型和自定义输出视图中CakePHP 3.x中的简易解决方案插入日期格式:
插入 ['规则' => ['日期'' DMY']] 强>
示例强>
public function validationDefault(Validator $validator)
{
...
$validator
->add('demo_example_date', 'valid', ['rule' => ['date','dmy']]) //Format valid '30-12-2015' or '30-12-05'
->requirePresence('demo_example_date', 'create')
->notEmpty('factura_fecha');
...
return $validator;
}
在视图中,设置AppController
...
use Cake\I18n\Time;
use Cake\Database\Type;
Time::$defaultLocale = 'es-ES';
Time::setToStringFormat('dd-MM-YYYY');
Type::build('datetime')->useLocaleParser();
class AppController extends Controller
{
...
}
答案 3 :(得分:1)
使用Postgres为我工作。
文件config / app.php
在变量Datasources ['default']中添加命令'SET datestyle TO ISO,DMY'到init
'Datasources' => [
'default' => [
'init' => ['SET datestyle TO ISO, DMY '],
],
在mysql中
答案 4 :(得分:1)
也许这可以帮助别人。
public function beforeSave($event, $entity, $options) {
$entity->dateField = date('Y-m-d', strtotime($entity->dateField));
}