Как отформатировать возвращаемое значение ввода даты из jQuery datepicker, чтобы соответствовать полю DATE mysql?

У меня есть форма с jQuery datepicker. Я установил формат даты по-европейски: dd-mm-yy , чтобы он выглядел хорошо для пользователя. Однако это значение даты должно быть отформатировано в PHP до yy-mm-dd так что оно может быть сохранено в моем поле DATE mysql . Вот мой код:

Jquery:

  $("document").ready(function(){ $(function() { $( ".datepicker" ).datepicker({ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], dayNamesMin: ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'], dateFormat:'dd-mm-yy', }); }); 

У вас есть три варианта (в каком-то расплывчатом порядке):

  1. Используйте STR_TO_DATE() MySQL для преобразования строки:

     INSERT INTO ... VALUES (STR_TO_DATE(:date, '%d/%m/%Y')) 
  2. Преобразуйте строку, полученную из jQuery, в объект PHP DateTime :

     $dt = DateTime::createFromFormat('d/m/Y', $_POST['date']); 

    а затем либо:

    • получить подходящую форматированную строку:

       $date = $dt->format('Ym-d'); 
    • получить временную метку UNIX:

       $timestamp = $dt->getTimestamp(); 

      который затем передается непосредственно функции MySQL FROM_UNIXTIME() :

       INSERT INTO ... VALUES (FROM_UNIXTIME(:timestamp)) 
  3. Вручную манипулируйте строкой в ​​действительный литерал:

     $parts = explode('-', $_POST['date']); $date = "$parts[2]-$parts[1]-$parts[0]"; 

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

 $( ".datepicker" ).datepicker({ dateFormat: 'dd-mm-yy', altField: '#actualDate', altFormat: 'yy-mm-dd' }); 

Это освобождает вас от отображения одного формата даты пользователю при отправке эквивалентной даты в формате даты, совместимом с MySQL.

 // dd-mm-yy to yy-mm-dd $date = explode('-',$_POST['date']); $mysqlDate = $date[2].'-'.$date[1].'-'.$date[0];