Преобразовать формат даты гггг-ММ-ДД => ДД-ММ-гггг [дубликат]

этот вопрос уже есть ответ здесь:

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

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

12 ответов


использовать strtotime() и date():

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));

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

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


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

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

или, что то же самое:

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

вы сначала даете ему формат $dateString. Потом ты рассказываешь это формат, который вы хотите $newDateString в.

или если исходный формат всегда "Y-m-d" (гггг-ММ-ДД), то просто используйте DateTime:

<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>

implode('-', array_reverse(explode('-', $date)));

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


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

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

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


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

дополнительные:

клик здесь

или еще короче:

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

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

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

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


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

хотя документация плохо описывает функцию strtotime, @rjmunro правильно решил проблему в своем комментарии: это в ISO формат даты "гггг-ММ-ДД".

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

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

PHP strtotime руководство здесь заявляет ,что"функция ожидает получить строку, содержащую английский формат даты". на самом деле это означает, что он ожидает американской даты США формат, например "m-d-Y" или "m/d/Y".

это означает, что дата, указанная как "Y-m-d", может быть неправильно истолкована strtotime. Вы должны указать дату в ожидаемом формате.

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

function Date_Converter($date, $locale = "br") {

    # Exception
    if (is_null($date))
        $date = date("m/d/Y H: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/Y H: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/Y H: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('d-m-Y', $date);

2)

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

Вы можете попробовать strftime


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

function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
    $date_aux = date_create_from_format($from_format, $date);
    return date_format($date_aux,$to_format);
}

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

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

date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));