web-dev-qa-db-fra.com

Convertir le format de date aaaa-mm-jj => jj-mm-aaaa

J'essaie de convertir une date aaaa-mm-jj en jj-mm-aaaa (mais pas en SQL); Cependant, je ne sais pas comment la fonction de date nécessite un horodatage, et je ne peux pas obtenir d'horodatage à partir de cette chaîne.

Comment est-ce possible?

450
matthy

Utilisez strtotime() et date():

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

(Voir la documentation strtotime et date sur le site PHP.)

Notez qu'il s'agissait d'une solution rapide à la question initiale. Pour des conversions plus étendues, vous devriez vraiment utiliser la classe DateTime pour analyser et mettre en forme :-)

988
richsage

Si vous souhaitez éviter la conversion strtotime (par exemple, strtotime ne peut pas analyser votre entrée), vous pouvez utiliser:

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

Ou équivalent:

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

Vous lui donnez d'abord le format dans lequel $ dateString se trouve. Ensuite, vous lui indiquez le format dans lequel vous souhaitez que $ newDateString soit.

Ou si le format source est toujours "Y-m-d" (aaaa-mm-jj), utilisez simplement 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
?>
257
ceiroa

Utilisation:

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

Sans les frais généraux liés à la conversion de la date, je ne suis pas sûr que cela importera beaucoup.

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

Ce code fonctionne pour chaque format de date.

Vous pouvez modifier l'ordre des variables de remplacement telles que $ 3- $ 1- 1 $ 2 en raison de votre ancien format de date.

33
Alper Sarı

Aussi une autre possibilité obscure:

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

Je ne sais pas si je l'utiliserais mais quand même :)

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

Pour plus d'informations, consultez le documentation pour strtotime .

Ou même plus court:

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

Note : Parce que la réponse de ce message a parfois été votée, je suis revenue ici pour demander gentiment aux gens de ne pas upvote plus. Ma réponse est ancienne, pas techniquement correcte, et il existe plusieurs meilleures approches ici. Je le garde ici uniquement à des fins historiques.

Bien que la documentation décrive mal la fonction strtotime, @rjmunro a correctement abordé le problème dans son commentaire: il est au format ISO "AAAA-MM-JJ".

De plus, même si ma fonction Date_Converter peut toujours fonctionner, j'aimerais vous avertir qu'il peut y avoir des déclarations imprécises ci-dessous, alors veuillez les ignorer.

La réponse la plus votée est en fait incorrecte!

Le PHP strtotime manuel ici indique que "La fonction s'attend à recevoir une chaîne contenant un format de date anglais". Cela signifie en réalité qu'il s'attend à un format de date américain, tel que "m-d-Y" ou "m/j/Y".

Cela signifie qu'une date fournie sous la forme "Y-m-d" peut être mal interprétée par strtotime. Vous devez fournir la date dans le format attendu.

J'ai écrit une petite fonction pour retourner les dates dans plusieurs formats. Utiliser et modifier à volonté. Si quelqu'un transforme cela en classe, je serais heureux si cela était partagé.

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
Igor Donin

Il y a deux façons d'implémenter ceci:

1.

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

2.

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

Vous pouvez essayer la fonction strftime() . Exemple simple: strftime($time, '%d %m %Y');

9
Sinan

Utilisez cette fonction pour convertir de tout format en tout 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);
}
8
Juancho Ramone

Ci-dessous figure PHP code pour générer la date de demain en utilisant mktime() et modifier son format en format jj/mm/aaaa, puis l’imprimer en utilisant echo.

$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
7
Vishnu
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
5
AbdulBasit

Pour cette conversion spécifique, nous pouvons également utiliser une chaîne de format.

$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));

Évidemment, cela ne fonctionnera pas pour de nombreuses autres conversions de format de date, mais comme nous ne faisons que réarranger les sous-chaînes, c’est une autre façon possible de le faire.

0
Don't Panic

Manière simple Utiliser strtotime() et date():

$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));

Avec le temps

$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
0
Sani Kamal