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));
}
我正在使用 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));
}