У меня есть форма с 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', }); });
У вас есть три варианта (в каком-то расплывчатом порядке):
Используйте STR_TO_DATE()
MySQL для преобразования строки:
INSERT INTO ... VALUES (STR_TO_DATE(:date, '%d/%m/%Y'))
Преобразуйте строку, полученную из 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))
Вручную манипулируйте строкой в действительный литерал:
$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];