Формат даты не работает правильно

Я отправляю форму с указателем диапазона дат.

У меня есть код, чтобы получить значение выбора из формы, которая находится в этом формате:

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));
Другие вопросы по тегам