2015-11-02 2 views
1

Я разрабатываю небольшое приложение с CakePHP, и мне нужно сохранить startdate и enddate для события. Я пошел с Bootstrap Daterangepicker, чтобы пользователи могли визуально вводить даты.Дата Daterangepicker по умолчанию равна нулю в CakePHP

В моей 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> 

Початкоотделитель работает просто отлично, он обновляет значения полей правильно, но когда Я пытаюсь сохранить форму, поле начала записывается в базу данных следующим образом:

начало 0 000-00-00 00:00:00
конец (нуль)

данные форм для начальных и конечных полей сохраняется должным образом, если я возвращаюсь к конфигурации по умолчанию полей.

Любые подсказки относительно того, где я сбой, будут высоко оценены.

+1

что тип поля в базе данных? –

+1

Какая версия CakePHP вы работаете? Вы пытались отладить содержимое '$ this-> request-> data' в контроллере перед сохранением? Преобразуете ли вы значение поля ввода в контроллер или используете ли вы какую-либо проверку (и в случае приложений CakePHP3)? –

+1

@PradeepSingh, поля datetime. Я передавал строки в базу данных. Выяснил это, отладив данные запроса, как советовал 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)); 

Это не большой мир кода, но это должно помочь идти дальше в правильном направлении. Мы берем эту строку и делаем временную метку из нее. Затем мы изменим его на правильное значение datetime.

Смежные вопросы