Конвертировать формат даты гггг-мм-дд => дд-мм-гггг [дубликат]


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

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

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

Author: Peter Mortensen, 2010-03-21

12 answers

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

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

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

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

 884
Author: richsage, 2016-04-11 12:25:07

Если вы хотите избежать преобразования 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" (гггг-мм-дд), то просто используйте Дата и время:

<?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
?>
 232
Author: ceiroa, 2015-11-25 06:42:21
implode('-', array_reverse(explode('-', $date)));

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

 61
Author: Tim Lytle, 2010-03-21 18:23:15
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

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

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

 31
Author: Alper Sarı, 2011-12-20 08:10:20
$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

Для получения дополнительной информации:

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

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

$new_date = date('d-m-Y', strtotime(your date variable));
 26
Author: Kevin, 2017-02-03 11:02:09

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

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

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

 24
Author: Gabriel, 2016-02-05 07:53:26

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

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

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

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

Руководство PHP strtotime здесь говорится, что "Функция ожидает, что ей будет предоставлена строка, содержащая английский формат даты". На самом деле это означает, что он ожидает американский формат даты в США, такой как "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
 17
Author: Igor Donin, 2017-11-24 13:41:48

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

1)

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

2)

$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y'); 
 15
Author: Raja Ram T, 2014-05-20 06:49:17

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

 10
Author: Sinan, 2015-07-23 06:51:30

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

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);
}
 9
Author: Juancho Ramone, 2015-09-29 21:22:07

Ниже приведен 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);
 8
Author: Vishnu, 2014-02-02 10:53:46
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
 7
Author: Abdul Basit, 2015-07-23 06:51:48