Конвертировать формат даты yyyy-mm-dd => dd-mm-yyyy

Я пытаюсь преобразовать дату из yyyy-mm-dd в dd-mm-yyyy (но не в SQL); однако я не знаю, как функция даты требует отметки времени, и я не могу получить временную метку из этой строки.

Как это возможно?

Используйте strtotime() и date() :

 $originalDate = "2010-03-21"; $newDate = date("dmY", strtotime($originalDate)); 

(см. strtotime и документы даты на сайте PHP).

Изменить : обратите внимание, что это было быстрое решение исходного вопроса. Для более широких преобразований вы действительно должны использовать класс DateTime для анализа и форматирования 🙂

Если вы хотите избежать преобразования strtotime (например, strtotime не может проанализировать ваш ввод), вы можете использовать,

 $myDateTime = DateTime::createFromFormat('Ym-d', $dateString); $newDateString = $myDateTime->format('dm-Y'); 

или, что эквивалентно:

 $newDateString = date_format(date_create_from_format('Ym-d', $dateString), 'dm-Y'); 

Сначала вы даете ему формат $ dateString. Затем вы сообщаете ему формат, в котором вы хотите $ newDateString.

Или, если исходным форматом всегда является «Ymd» (yyyy-mm-dd), просто используйте DateTime :

 <?php $source = '2012-07-31'; $date = new DateTime($source); echo $date->format('dmY'); // 31.07.2012 echo $date->format('dm-Y'); // 31-07-2012 ?> 
 implode('-', array_reverse(explode('-', $date))); 

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

 $newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate); 

Этот код работает для каждого формата даты.

Вы можете изменить порядок замены переменных, таких как $ 3- $ 1- $ 2, из-за вашего старого формата даты.

 $timestamp = strtotime(your date variable); $new_date = date('dm-Y', $timestamp); 

Для большего:

нажмите здесь

Или даже короче:

 $new_date = date('dm-Y', strtotime(your date variable)); 

Также еще одна неясная возможность:

 $oldDate = '2010-03-20' $arr = explode('-', $oldDate); $newDate = $arr[2].'-'.$arr[1].'-'.$arr[0]; 

Я не знаю, буду ли я использовать его, но все же 🙂

Редактировать: потому что ответ этой почты иногда получает одобрение, я вернулся сюда, чтобы любезно попросить людей больше не повышать его. Мой ответ древний, а не технически правильный, и здесь есть несколько лучших подходов. Я держу его здесь только для исторических целей.

Хотя в документации плохо описывается функция strtotime, @rjmunro правильно рассмотрел проблему в своем комментарии: она находится в формате ISO «YYYY-MM-DD».

Кроме того, несмотря на то, что моя функция Date_Converter все еще работает, я хотел бы предупредить, что ниже могут быть неточные инструкции, поэтому, пожалуйста, не обращайте на них внимания.

Самый проголосовавший ответ на самом деле неверен!

В PHP strtotime Manual здесь указано, что «Функция ожидает, что будет задана строка, содержащая английский формат даты». Фактически это означает, что он ожидает формат американской американской даты, такой как «mdY» или «m / d / Y».

Это означает, что дата, представленная как «Ymd», может быть неверно истолкована strtotime. Вы должны указать дату в ожидаемом формате.

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

 function Date_Converter($date, $locale = "br") { # Exception if (is_null($date)) $date = date("m/d/YH:i:s"); # Let's go ahead and get a string date in case we've been given a Unix Time Stamp if ($locale == "unix") $date = date("m/d/YH:i:s", $date); # Separate Date from Time $date = explode(" ", $date); if ($locale == "br") { # Separate d/m/Y from Date $date[0] = explode("/", $date[0]); # Rearrange Date into m/d/Y $date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2]; } # Return date in all formats # US $Return["datetime"]["us"] = implode(" ", $date); $Return["date"]["us"] = $date[0]; # Universal $Return["time"] = $date[1]; $Return["unix_datetime"] = strtotime($Return["datetime"]["us"]); $Return["unix_date"] = strtotime($Return["date"]["us"]); $Return["getdate"] = getdate($Return["unix_datetime"]); # BR $Return["datetime"]["br"] = date("d/m/YH:i:s", $Return["unix_datetime"]); $Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]); # Return return $Return; } # End Function 

два способа реализации этого

 1) $date = strtotime(date); $new_date = date('dm-Y', $date); 

2)

 $cls_date = new DateTime($date); echo $cls_date->format('dm-Y'); 

Вы можете попробовать функцию strftime . Что-то вроде strftime($time, '%d %m %Y');

Ниже приведен код PHP для генерации даты завтрашнего дня с использованием mktime() и изменения его формата в формате dd / mm / yyyy , а затем печать его с помощью echo .

 $tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")); echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow); 

Используйте эту функцию для преобразования из любого формата в любой формат

 function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Ym-d') { $date_aux = date_create_from_format($from_format, $date); return date_format($date_aux,$to_format); } 
 date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));