2015-11-02 86 views
1

我正在开发一个CakePHP的小应用程序,我需要为一个事件保存一个startdate和一个enddate。我与Bootstrap Daterangepicker一起去让用户直观地输入日期。CakePHP的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 0 000-00-00 00:00:00
末 (空)

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

任何关于我失败的线索将不胜感激。

+1

什么是数据库中的字段类型? –

+1

您使用的是哪个版本的CakePHP?你有没有试过在保存之前调试控制器中的'$ this-> request-> data'内容?您是在变换控制器中的输入字段的值还是在使用任何验证(以及CakePHP3应用程序的情况下)规则? –

+1

@PradeepSingh,这些字段是日期时间。我正在将字符串传递给数据库。根据Oops D'oh的建议,通过调试请求数据来解决这个问题。我正在看一场比赛,因为你的评论指出我的方向是正确的。 –

回答

0

好吧,所以我将文本传递给日期时间字段,保存操作失败。为了解决这个问题,我必须通过在模型的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)); 
} 
1

尝试这样的事情

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

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