2015-11-02 137 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)); 

這不是代碼有很大的和平,但它應該有助於進一步走在正確的方向。 我們取這個字符串並從中取出一個時間戳。然後我們將其更改爲適當的日期時間值。