【问题标题】:DateTime not save properly in cakephp 3.x with bootstrap datetimepicker使用引导程序 datetimepicker 在 cakephp 3.x 中 DateTime 无法正确保存
【发布时间】:2016-02-11 09:09:41
【问题描述】:

我使用的是 cakephp 3.x,我有一个表单,其中一个字段是日期的。在后端我使用的是 mysql。

我在 mysql 中的字段结构是 dob,类型为 date

现在在 cakephp 3.x 中,我使用以下语法来创建输入。

echo $this->Form->input('dob', array(
    'label' => (__('Date of Birth')),
    'type' => 'text',
    'required' => false,
    'class' => 'form-control date'
));

我曾经使用过引导日期时间选择器,

$('.date').datetimepicker({
    format: 'YYYY-MM-DD'
});

现在当我在print_r 提交表单时,我当时的请求数据是这样的

[
....
'dob' => '2016-02-11',
....
]

但是当我保存记录并查看数据库时,它会显示随机日期,例如2036-10-25

谁能帮帮我?

【问题讨论】:

  • 你为你的应用设置了什么语言环境?
  • 我没有设置。我使用默认的。
  • 那么它是en_US。在这种情况下,这似乎是 stackoverflow.com/questions/33734683/… 的副本。您应该能够应用类似于date 而不是datetime,分别应用于\Cake\I18n\Date 而不是\Cake\I18n\Time

标签: php mysql twitter-bootstrap datetime cakephp


【解决方案1】:

这是最终的通用解决方案,

//File : src/Model/Table/PatientsTable.php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Event\Event;
use ArrayObject;
use Cake\I18n\Time;

class PatientsTable extends Table
{
    ...
    ...
    public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
    {
        if (isset($data['dob'])) {
            $data['dob'] = Time::parseDate($data['dob'], 'Y-M-d');
        }
    }
}

【讨论】:

    【解决方案2】:

    您将 dob 类型声明为日期,但尝试以字符串格式而不是日期时间格式保存日期。试试这个

    use Cake\I18n\Time;
    
    $this->request->data['dob']= Time::parseDate($this->request->data['dob'],'Y-M-d');
    

    【讨论】:

    • 谢谢,它的作品。但我需要可以放在实体或其他地方的全局解决方案。
    猜你喜欢
    • 2018-04-02
    • 2015-10-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2017-07-05
    相关资源
    最近更新 更多