Daterangepicker 日期在 CakePHP 中默认为零

Daterangepicker date defaults to zero in CakePHP

我正在使用 CakePHP 开发一个小应用程序,我需要为一个事件保存一个 startdate 和一个 enddate。我使用 Bootstrap Daterangepicker 让用户直观地输入日期。

在我的 add.ctp 视图中,我有两个字段:

<div class="form-group">
  <?php echo $this->Form->input('start', array(
    'class' => 'form-control',
    'type' => 'text', 
    'id' => 'start',
    'name' => 'start',
    'data-mask')); ?>
</div><!-- .form-group -->
<div class="form-group">
  <?php echo $this->Form->input('end', array(
    'class' => 'form-control',
    'type' => 'text', 
    'id' => 'end', 
    'name' => 'end',
    'data-mask')); ?>
</div>

以及控制输入的 Javascript:

<script type="text/javascript">
  $(function() {
    $('input[name="start"]').daterangepicker({
      timePicker24Hour: true,
      singleDatePicker: true,
      timePicker: false,
      timePickerIncrement: 30,
      locale: {
        format: 'YYYY-MM-DD HH:mm:ss'
      }
    });
    $('input[name="end"]').daterangepicker({
      timePicker24Hour: true,
      singleDatePicker: true,
      timePicker: false,
      timePickerIncrement: 30,
      locale: {
        format: 'YYYY-MM-DD HH:mm:ss'
      }
    });
  });
</script>

选择器工作正常,它正确地更新了字段值,但是当我尝试保存表单时,开始字段被写入数据库,如下所示:

start 0000-00-00 00:00:00
end (null)

如果我恢复到字段的默认配置,开始和结束字段的表单数据会正确保存。

任何有关我失败之处的线索都将不胜感激。

尝试这样的事情

$correctdate = date("Y-m-d j:h:m",strtotime($yourdate));

这不是一个很好的代码和平,但它应该有助于在正确的方向上走得更远。 我们取这个字符串并用它做一个时间戳。然后我们将其更改为适当的日期时间值。

好的,我正在将文本传递到日期时间字段,但保存操作失败了。为了解决这个问题,我必须通过在模型的 beforeSave() 函数中处理它来将字符串转换为正确的类型。

这是对我有用的代码:

public function beforeSave($options = array()) {

    if (!empty($this->data['Task']['start']) && !empty($this->data['Task']['end'])) {

        $this->data['Task']['start'] = $this->dateFormatBeforeSave($this->data['Task']['start']);
        $this->data['Task']['end'] = $this->dateFormatBeforeSave($this->data['Task']['end']);
        }

        return true;
    }


public function dateFormatBeforeSave($dateString) {
    return date('Y-m-d h:m:s', strtotime($dateString));
}