Я хочу изменить формат даты по php, у меня есть дата в формате, подобном этому d/m/Y
и я хочу перейти на Ymd
Я видел этот вопрос, но для моего случая я все равно получаю пустое значение.
EX:$_REQUEST["date_moc"]='21/07/2014';
Я попытался выполнить echo strtotime($_REQUEST["date_moc"]);
но ничего не отображается на моем экране.
и когда я echo date("Ymd",strtotime($_REQUEST["date_moc"]));
Я получаю 1970-01-01
Любая помощь, пожалуйста, я действительно удивляюсь моему коду, который возвращает пустое значение, например, если возможно, скажите мне с моей проблемой. Я с нетерпением жду вашего ответа в ближайшее время!
Благодаря!
Самый простой способ
$_REQUEST["date_moc"]='21/07/2014'; $explode = explode('/', $_REQUEST["date_moc"]); list($day,$month,$year) = $explode; $new_date = "$year-$month-$day"; echo $new_date;
Попробуйте следующее: – Рабочая демонстрация
$date = explode('/',str_replace('-','/',$_REQUEST["date_moc"])); $updated_date = $date[2].'-'.$date[1].'-'.$date[0]; echo $updated_date;
$_REQUEST["date_moc"]='21/07/2014'; $original_date = explode('/', $_REQUEST["date_moc"]); $year = $original_date[2]; // 2014 $month = $original_date[1]; // 07 $day = $original_date[0]; // 21 $date = $year.'/'.$month.'/'.$day; echo $date;
демонстрация
Очень просто использовать DateTime::createFromFormat()
$date = DateTime::createFromFormat('d/m/Y', '21/07/2014'); echo $date->format('Ym-d');
Смотрите демо-версию на eval.in
Для улучшения
Затем вы можете также проверить недопустимый ввод, если вы расширите фрагмент выше бит:
if(($date = DateTime::createFromFormat('d/m/Y', '21//2014')) !== false) echo $date->format('Ym-d'); else echo 'Invalid format';
Но это только проверка шаблона, которая аналогична регулярному выражению
/ (\ D {1,2}) / (\ d {1,2}) / (\ d {4}) /
Это позволяет пользователю вводить что-то вроде:
50/13/2014
Чтобы проверить, действительно ли предоставленная дата действительна или недействительна, проверьте содержимое DateTime::getLastErrors()
. Он расскажет вам подробно, что пошло не так. Для примера выше вы получите что-то вроде этого:
array(4) { ["warning_count"]=> int(1) ["warnings"]=> array(1) { [10]=> string(27) "The parsed date was invalid" } ["error_count"]=> int(0) ["errors"]=> array(0) { } }
Поэтому в соответствии с этой информацией мы можем немного расширить фрагмент. Это приводит нас к результату, подобному этому:
$date = DateTime::createFromFormat('d/m/Y', '50/13/2014') if($date !== false) { $dateLastErrors = $date->getLastErrors(); if($dateLastErrors['error_count'] > 0 || $dateLastErrors['warning_count'] > 0) echo 'Invalid date'; else echo $date->format('Ym-d'); } else echo 'Invalid date format'; }
Которая, наконец, проверит дату против формата проверки.
$date = $_REQUEST["date_moc"];// OR $date ='21/07/2014'; avoid $_REQUEST["date_moc"]='21/07/2014'; echo date('Ym-d', strtotime($date));
Простейший способ
$date ='21/07/2014'; $date = str_replace("/", "-", $date); echo date("Ymd",strtotime($date));
Рабочая демонстрация