Konwertuj format daty RRRR-mm-dd => dd-mm-RRRR [duplikat]

To pytanie ma już odpowiedź tutaj:

Próbuję przekonwertować datę z RRRR-mm-dd na dd-mm-RRRR (ale nie w SQL); jednak nie wiem, jak funkcja daty wymaga znacznika czasu, i nie mogę uzyskać znacznika czasu z tego ciągu.

Jak to możliwe?

Author: Peter Mortensen, 2010-03-21

12 answers

Użycie strtotime() i date():

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

(Zobacz strtotime i date dokumenty na stronie PHP).

Edit : zauważ, że było to szybkie rozwiązanie pierwotnego pytania. W przypadku bardziej rozbudowanych konwersji, naprawdę powinieneś używać DateTime klasa do parsowania i formatowania: -)

 884
Author: richsage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 12:25:07

Jeśli chcesz uniknąć konwersji strtotime (na przykład strtotime nie jest w stanie przetworzyć danych wejściowych) możesz użyć,

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

Lub równoważnie:

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

Najpierw nadajesz mu format $dateString. Następnie mówisz mu format, w którym chcesz mieć $newDateString.

Lub jeśli format źródłowy zawsze jest "Y-m-D" (yyyy-mm-dd), po prostu użyj 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
?>
 232
Author: ceiroa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-25 06:42:21
implode('-', array_reverse(explode('-', $date)));

Bez przeliczania dat, Nie wiem, czy to ma znaczenie.

 61
Author: Tim Lytle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-21 18:23:15
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

Ten kod działa dla każdego formatu daty.

Możesz zmienić kolejność zmiennych zastępczych, takich jak $3 - $1 - $2 ze względu na stary format daty.

 31
Author: Alper Sarı,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-20 08:10:20
$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

Więcej:

Kliknij tutaj

Lub jeszcze krócej:

$new_date = date('d-m-Y', strtotime(your date variable));
 26
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 11:02:09

Również inna niejasna możliwość:

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

Nie wiem czy bym z niego skorzystał ale i tak:)

 24
Author: Gabriel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-05 07:53:26

Edit: ponieważ odpowiedź na ten post czasami się podnosi, wróciłem uprzejmie proszę ludzi, żeby już tego nie popierali. Moja odpowiedź brzmi: starożytne, nie poprawne technicznie, a jest kilka lepszych zbliża się tutaj. Trzymam go tylko dla historycznych cele.

Chociaż dokumentacja źle opisuje funkcję strtotime, @rjmunro poprawnie poruszył ten problem w komentarzu: jest w ISO format daty "RRRR-MM-DD".

Także, nawet chociaż moja funkcja Date_Converter może nadal działać, chciałbym ostrzec, że poniżej mogą być nieprecyzyjne stwierdzenia, więc proszę nie lekceważ ich.

najczęściej głosowana odpowiedź jest nieprawidłowa!

Instrukcja PHP strtotime tutaj stwierdza, że "funkcja oczekuje, że otrzyma łańcuch zawierający angielski format daty". w rzeczywistości oznacza to, że oczekuje amerykańskiego formatu daty, takiego jak" m-d-Y " lub "m / d / Y".

Oznacza to, że data podana jako "Y-m-d" może zostać błędnie zinterpretowana przez strtotime. Należy podać datę w oczekiwanym formacie.

Napisałem małą funkcję zwracającą daty w kilku formatach. Używać i modyfikować zgodnie z wolą. jeśli ktoś zmieni to w klasę, byłbym zadowolony, gdyby to było dzielone.

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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-24 13:41:48

Dwa sposoby realizacji tego

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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-20 06:49:17

Możesz spróbować strftime funkcja. Coś jak strftime($time, '%d %m %Y');

 10
Author: Sinan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 06:51:30

Użyj tej funkcji do konwersji z dowolnego formatu na dowolny format

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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 21:22:07

Poniżej podany jest kod PHP do wygenerowania jutrzejszej daty za pomocą mktime() i zmiany jej formatu na dd / mm / RRRR, a następnie wydruku za pomocą 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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-02 10:53:46
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
 7
Author: Abdul Basit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 06:51:48