Convertir la date format AAAA-mm-JJ => JJ-mm-AAAA [dupliquer]

cette question a déjà une réponse ici:

j'essaie de convertir une date de AAAA-mm-JJ en JJ-mm-AAAA (mais pas en SQL); cependant je ne sais pas comment la fonction date nécessite un timestamp, et je ne peux pas obtenir un horodatage de cette chaîne.

Comment est-ce possible?

405
demandé sur Peter Mortensen 2010-03-21 20:11:12

12 réponses

utiliser strtotime() et date() :

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

(voir strtotime et date docs sur le Site PHP).

Edit : notez que c'était une solution rapide à la question originale. Pour des conversions plus étendues, vous devriez vraiment utiliser le DateTime classe à analyser & format: -)

884
répondu richsage 2016-04-11 12:25:07

si vous souhaitez éviter la conversion strtotime (par exemple strtotime n'est pas en mesure de parser vos entrées), vous pouvez utiliser,

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

ou, de manière équivalente:

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

vous lui donnez d'abord le format $dateString est en. Alors vous lui dites le format dans lequel vous voulez que $newDateString soit.

ou si le format source est toujours "Y-m-d" (AAAA-mm-JJ), alors il suffit d'utiliser 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
répondu ceiroa 2015-11-25 06:42:21
implode('-', array_reverse(explode('-', $date)));

sans frais généraux de conversion de date,pas sûr que ce sera important.

61
répondu Tim Lytle 2010-03-21 18:23:15
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","--",$originalDate);

ce code fonctionne pour chaque format de date.

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

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

pour plus:

cliquez sur ici

ou même plus court:

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

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 encore :)

24
répondu Gabriel 2016-02-05 07:53:26

Edit: parce que la réponse de ce post est parfois rétrograde, je suis revenu je suis ici pour demander aux gens de ne plus l'approuver. Ma réponse est Ancien, pas techniquement correct, et il ya plusieurs meilleurs les approches de droit ici. Je ne le garde ici que pour l'histoire. but.

bien que la documentation décrit mal La fonction strtotime, @rjmunro a correctement abordé la question dans son commentaire: c'est en ISO format de date "AAAA-MM-JJ".

aussi, même si ma fonction Date_Converter peut encore fonctionner, je comme pour l'avertir qu'il peut être imprécis énoncés ci-dessous, veuillez donc ne négligez.

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

PHP strtotime Manuel ici "1519170920 précise que:" La fonction s'attend à recevoir une chaîne de caractères contenant une Anglais format de la date". en fait, cela signifie qu'il s'attend à un format de date américain, comme" m-d-Y "ou"m/d/Y".

ce qui signifie qu'une date fournie comme" Y-m-D " peut être mal interprétée par strtotime. Vous devez fournir la date dans le format prévu.

j'ai écrit une petite fonction pour retourner des dates dans plusieurs formats. Utilisez et modifiez comme bon vous semble. si quelqu'un en fait une classe, je serais heureux si cela être 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
répondu Igor Donin 2017-11-24 13:41:48

deux façons de mettre en œuvre ce

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
répondu Raja Ram T 2014-05-20 06:49:17

vous pouvez essayer strftime fonction. Quelque chose comme strftime($time, '%d %m %Y');

10
répondu Sinan 2015-07-23 06:51:30

utilisez cette fonction pour convertir de n'importe quel format à n'importe quel 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
répondu Juancho Ramone 2015-09-29 21:22:07

ci-dessous est le code PHP pour générer la date de demain en utilisant mktime() et changer son format en JJ/mm/AAAA format et ensuite 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);
8
répondu Vishnu 2014-02-02 10:53:46
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
7
répondu Abdul Basit 2015-07-23 06:51:48