Ввод даты в HTML5, сохранение в базе данных MySQL

У меня немного неприятностей, и я не могу найти какие-либо твердые ответы. Но надеюсь, что кто-то может помочь.

У меня есть форма ввода HTML5, которая получает выбранную дату

<input type="date" name="launch_date" />

Это вызывает DatePicker и вводит дату в дд / мм / гг

Я пытаюсь сохранить это в базе данных SQL, которая использует тип DATE в таблице. Итак, сначала я делаю переменные всех входов формы

$launch_date = $_POST['launch_date'];

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

Затем все переменные добавляются в правильные столбцы как часть запроса SQL INSERT / UPDATE.

$launch_date = strtotime($launch_date);

Когда бы я ни заглядывал в базу данных, он всегда показывает 0000-00-00, как будто он ожидает формат ГГГГ-ММ-ДД.

Как я могу получить его так, чтобы дата, введенная во внешнем интерфейсе, была ДД-ММ-ГГГГ, но правильно сохранялась в базе данных как ГГГГ-ММ-ДД?

ОБНОВИТЬ

Хорошо, я думаю, я пытался сделать это слишком сложным. Используя ввод даты в HTML5 и сохраняя его непосредственно в базе данных в столбце типа DATA, он сохраняется как YYY-MM-DD. Кажется, работает нормально.

Когда я повторю эти значения, будет выведено, например, 2014-09-24. Как я могу сделать это шоу 24-09-2014?

<?php echo $row['start_date'];?>

1

Решение

Вы можете изменить в самом палитре дат JQuery.

$( "#launch_date" ).datepicker({
dateFormat : 'yy-mm-dd'
});

Эта функция появится в формате MySQL Date-Time.

0

Другие решения

Я думаю, что ваша проблема в strtotime ().
Давайте заменим эту строку на это:

list($day,$mon,$year) = explode('/', $launch_date);
$launch_date = "$year-$mon-$day";
0

Меня устраивает. Обратите внимание, что stringToTime() возвращает метку времени Unix (т. е. количество секунд с 1 января 1970 года 00:00:00 UTC), которое может не соответствовать ожидаемой в вашей базе данных.

Имейте ввиду, что презентационный значение может отличаться в зависимости от браузера и локали пользователя, но фактический представленное значение должно быть «Действительная полная дата, как определено в [RFC 3339]»

Вот небольшая демонстрация:

<?php
$launch_date = $_POST['launch_date'];
echo '$launch_date = \''.$launch_date.'\' <br />';
$launch_date = strtotime($launch_date);
echo 'strtotime($launch_date) = \''.$launch_date.'\' '; //a unix timestamp eg '1410480000'
?>
<form method="post">
<input type="date" name="launch_date" />
<input type="submit"/>
</form>

http://runnable.com/VCLkST-wq9cPvwJT/stackoverflow-com-questions-26020544-for-php

ОБНОВИТЬ

В дополнение к вашей смене вопроса. Вы можете отформатировать дату, используя PHP DateTime :: формат, как это:

<?php echo date_format($row['start_date'], 'd-m-Y');?>
0

По моему опыту, многие проблемы сводятся к настройкам локали на сервере.

PHP может распознавать дд / мм / гггг как мм / дд / гггг и иметь соответствие, если дневная часть недействительна. Чтобы PHP корректно проверял дату как дд / мм / гггг, поменяйте местами / для — (дд-мм-гггг), когда

$launch_date = $_POST['launch_date'];
$launch_date = str_replace("/", "-", $launch_date);
$launch_date = strtotime($launch_date);

Это просто быстрый взлом, чтобы увидеть, так ли это. Если нет, то я бы рекомендовал, по крайней мере, добавить var_dumps по пути, чтобы проверить, правильно ли отформатирована дата.

Другой способ — проанализировать дату вместе с форматом, в котором она будет анализироваться с помощью date_create_from_format (http://php.net/manual/en/datetime.createfromformat.php).

$launch_date = date_create_from_format('d/m/Y', $launch_date );

Я не думаю, что есть реализация на Windows PHP … так что если у вас возникли проблемы, вот функциональная реализация

if (!function_exists('date_parse_from_format')) {

function date_parse_from_format($format, $date) {
$returnArray = array('hour' => 0, 'minute' => 0, 'second' => 0,
'month' => 0, 'day' => 0, 'year' => 0);

$dateArray = array();

// array of valid date codes with keys for the return array as the values
$validDateTimeCode = array('Y' => 'year', 'y' => 'year',
'm' => 'month', 'n' => 'month',
'd' => 'day', 'j' => 'day',
'H' => 'hour', 'G' => 'hour',
'i' => 'minute', 's' => 'second');

/* create an array of valid keys for the return array
* in the order that they appear in $format
*/
for ($i = 0; $i <= strlen($format) - 1; $i++) {
$char = substr($format, $i, 1);

if (array_key_exists($char, $validDateTimeCode)) {
$dateArray[$validDateTimeCode[$char]] = '';
}
}

// create array of reg ex things for each date part
$regExArray = array('.' => '\.', // escape the period
// parse d first so we dont mangle the reg ex
// day
'd' => '(\d{2})',
// year
'Y' => '(\d{4})',
'y' => '(\d{2})',
// month
'm' => '(\d{2})',
'n' => '(\d{1,2})',
// day
'j' => '(\d{1,2})',
// hour
'H' => '(\d{2})',
'G' => '(\d{1,2})',
// minutes
'i' => '(\d{2})',
// seconds
's' => '(\d{2})');

// create a full reg ex string to parse the date with
$regEx = str_replace(array_keys($regExArray), array_values($regExArray), $format);

// Parse the date
preg_match("#$regEx#", $date, $matches);

// some checks...
if (!is_array($matches) ||
$matches[0] != $date ||
sizeof($dateArray) != (sizeof($matches) - 1)) {
return $returnArray;
}

// an iterator for the $matches array
$i = 1;

foreach ($dateArray AS $key => $value) {
$dateArray[$key] = $matches[$i++];

if (array_key_exists($key, $returnArray)) {
$returnArray[$key] = $dateArray[$key];
}
}

return $returnArray;
}

}

РЕДАКТИРОВАТЬ: На всякий случай, если это было пропущено … убедитесь, что вы затем конвертируете его в ГГГГ-ММ-ДД, когда он входит в БД:

// Whatever you do to parse date into timestamp
$launch_date_db = date("Y-m-d H:i:s", $launch_date)

ОБНОВИТЬ

PHP любит временные метки … так что давайте:

$launch_date = strtotime($row['start_date']); // convert it into timestamp
echo date('d-m-Y', $launch_date); // format timestamp
0

Установка правильного формата с помощью SQL:

.... VALUES (STR_TO_DATE('24-09-2014', '%d-%m-%Y'))

Возвращение

SELECT DATE_FORMAT(datefield, '%d-%m-%Y') FROM ......
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector