Неверное значение времени для базы данных с использованием ввода datetimepicker

#javascript #php #mysql #codeigniter #datetimepicker

#javascript #php #mysql #codeigniter #datetimepicker

Вопрос:

Я получаю эту ошибку при попытке вставить время в mysql.

«Неверное значение времени …. «

Мой контроллер:

 $data = array(
'branch_open_time'  => date("H:i:s",strtotime($this->input->post('time_range_from'))),
'branch_close_time' => date("H:i:s",strtotime($this->input->post('time_range_to')))
);
$this->db->insert('branch_user',$data);
$this->db->insert_id();
  

Мой взгляд и javascript:

 <div id="datetimepicker" class="input-append" style="resize: none;" data-autoclose="true">
                    <label for="open">Waktu Buka</label><br />
                    <div class="input-group">
                        <input data-format="HH:mm PP" type="text" class="form-control" name="time_range_from" id="time_range_from">
                        <span class="add-on input-group-addon" style="height: 30px">
                        <i class="glyphicon glyphicon-time"></i>
                        </span>
                    </div>
                </div>

<div id="datetimepicker2" class="input-append" style="resize: none;" data-autoclose="true">
                    <label for="open">Waktu Tutup</label><br />
                    <div class="input-group">
                        <input data-format="HH:mm PP" type="text" class="form-control" name="time_range_to" id="time_range_to">
                        <span class="add-on input-group-addon" style="height: 30px">
                        <i class="glyphicon glyphicon-time"></i>
                        </span>
                    </div>
                </div>
  

jQuery:

 $(function() {
    $('#datetimepicker').datetimepicker
        ({
            pick12HourFormat: true,
            language: 'en',
            pickDate: false
        });
    $('#datetimepicker2').datetimepicker
        ({
            pick12HourFormat: true,
            language: 'en',
            pickDate: false
        });
});
  

добавить функцию:

 function add_location(){
branch_open_time = $("#time_range_from").val();
barnch_close_time = $("#time_range_to").val();
$.ajax
    ({
        url : 'add_location',
        type: "POST",
        dataType: "text",
        data:{
            time_range_from: branch_open_time,
            time_range_to: barnch_close_time
        },
        success: function(data)
        {     
            location.reload();
        },
        error: function (jqXHR, textStatus, errorThrown)
        {
            alert('Error data');
        }

    });
}
  

Указатель времени отображается правильно в 12-часовом формате, и я конвертирую его из H: i: s в strtotime перед вставкой в базу данных, но это не работает. Что я сделал не так?

ввод datetimepicker:

datetimepicker

Комментарии:

1. Какой тип поля вашей базы данных? varchar или time .

2. время. @AHJeebon

3. И какой именно формат времени отправляется из браузера? Это что-то вроде 10:30am или что?

4.Внутри функции add_location(){ добавьте var для инициализации переменную. Это будет: var branch_open_time = $("#time_range_from").val(); var barnch_close_time = $("#time_range_to").val();

5. Вы пытались проверить вывод date("H:i:s",strtotime($this->input->post('time_range_from'))) и date("H:i:s",strtotime($this->input->post('time_range_to'))) ?

Ответ №1:

Строка

 echo date("H:i:s",strtotime('05 : 54 : 51 PM'));
  

Приведет к результату 00:00:00

Однако

 echo date("H:i:s",strtotime('05:54:51 PM'));
  

или

 echo date("H:i:s",strtotime('05:54:51PM'));
  

Приведет к результату 17:54:51

Поэтому вам нужно вырезать эти пробелы из времени либо в javascript, либо в PHP-коде, прежде чем отправлять эти данные в команду INSERT

Например

 $t1 = date('H:i:s', str_replace(' ', '', $this->input->post('time_range_from')));
$t2 = date('H:i:s', str_replace(' ', '', $this->input->post('time_range_to')));
$data = array(
            'branch_open_time'  => $t1,
            'branch_close_time' => $t2
            );
$this->db->insert('branch_user',$data);
$this->db->insert_id();
  

Комментарии:

1. спасибо за вашу помощь, но это 05:54:51 PM отображается в журнале консоли, и я все равно получаю 01:00:00 после вставки в базу данных:(

2. Каков тип данных столбцов, в которые вы вставляете эти данные

Ответ №2:

При прочих равных условиях:

Обновите свой код до этого:

Я добавил var перед переменной, чтобы установить ее как переменную

 function add_location(){
   var branch_open_time = $("#time_range_from").val();
   var barnch_close_time = $("#time_range_to").val();

   $.ajax({
     url : 'add_location',
     type: "POST",
     dataType: "text",
     data:{
        time_range_from: branch_open_time,
        time_range_to: barnch_close_time
     },
     success: function(data)
     {     
        location.reload();
     },
     error: function (jqXHR, textStatus, errorThrown)
     {
        alert('Error data');
     }

 });
  

}

Пробелы в вашей дате делают ее недействительной перед вставкой

Используйте это, чтобы удалить пробел из даты, чтобы сделать ее допустимой:

 str_replace(' ','',$date);