Формат даты не работает правильно
Я отправляю форму с указателем диапазона дат.
У меня есть код, чтобы получить значение выбора из формы, которая находится в этом формате:
01/03/2017 - 01/03/2017
У меня так же есть, чтобы разбить диапазон дат на две переменные.
$one = 20/01/2017
$two = 13/03/2017
Сейчас я пытаюсь отформатировать дату этих переменных в ту, которую использует MYSQL.
Моя проблема в том, что дата окончания не удастся и будет отображаться как 1970-01-01 все время.
// Get the range from the form
$daterange = $_POST["daterange"];
// Split the range into a start and end date
list($one, $two) = explode("-", "$daterange", 2);
// Test the split worked
echo $one;
echo $two;
// Format the start date into MySQL style
$StartDate = date("Y-m-d", strtotime($one));
// Test date
echo $StartDate;
// Format the end date into MySQL style
$EndDate = date("Y-m-d", strtotime($two));
//Test date
echo $EndDate;
3 ответа
Попробуй это:
$one = '20/01/2017';
$one = str_replace('/', '-', $one);
echo date('Y-m-d', strtotime($one));
// Вывод: 2017-01-20
По этой причине см . Руководство по PHP для
strtotime()
Конкретно это примечаниеПримечание. Даты в форматах m / d / y или dmy устраняются неоднозначно, если посмотреть на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что используется американский m / d / y; тогда как, если разделителем является тире (-) или точка (.), то подразумевается европейский формат dmy. Однако, если год указан в двузначном формате, а разделителем является тире (-, строка даты анализируется как ymd.
Чтобы избежать двусмысленности, лучше всего использовать даты ISO 8601 (ГГГГ-ММ-ДД) или DateTime::createFromFormat(), когда это возможно.
Персонально, я предпочитаю date_create_from_format
это ничего не предполагает.
Один лайнер:
$StartDate = date_create_from_format( "d/m/Y" , $one )->format("Y-m-d");
Используйте это, чтобы отформатировать вашу дату:
$StartDate = date_format(date_create_from_format('d/m/Y', $one), 'Y-m-d');
Чтобы изменить:
$reverse = date('d/m/Y', strtotime($StartDate));