J'essaie de convertir une date de yyyy-mm-dd
à dd-mm-yyyy
(mais pas en SQL); cependant, je ne sais pas comment la fonction date nécessite un horodatage et je ne peux pas obtenir d'horodatage de cette chaîne.
Comment est-ce possible?
J'essaie de convertir une date de yyyy-mm-dd
à dd-mm-yyyy
(mais pas en SQL); cependant, je ne sais pas comment la fonction date nécessite un horodatage et je ne peux pas obtenir d'horodatage de cette chaîne.
Comment est-ce possible?
Réponses:
Utiliser 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 d'origine. Pour des conversions plus étendues, vous devriez vraiment utiliser la DateTime
classe pour analyser et formater :-)
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 $ dateString. Ensuite, vous lui indiquez le format dans lequel $ newDateString doit être.
Ou si le format source est toujours "Ymd" (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
?>
DateTime::createFromFormat()
- c'est vraiment plus utile questrtotime()
strtotime()
utile pour convertir le vrai format (Ymd) en d'autres formats, mais DateTime::createFromFormat()
est universel. C'est comme STR_TO_DATE
dans MySQL
strtotime()
Utilisation:
implode('-', array_reverse(explode('-', $date)));
Sans les frais généraux de conversion de date, je ne suis pas sûr que cela importera beaucoup.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Ce code fonctionne pour chaque format de date.
Vous pouvez changer l'ordre des variables de remplacement telles que $ 3- $ 1- $ 2 en raison de votre ancien format de date.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Pour plus d'informations, consultez la documentation destrtotime
.
Ou encore plus court:
$new_date = date('d-m-Y', strtotime(your date variable));
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 :)
Remarque : Parce que la réponse de ce message est parfois votée, je suis revenu ici pour demander aux gens de ne plus voter. Ma réponse est ancienne, pas techniquement correcte, et il existe plusieurs meilleures approches ici. Je ne le garde ici qu'à des fins historiques.
Bien que la documentation décrive mal la fonction strtotime, @rjmunro a correctement résolu le problème dans son commentaire: il est au format ISO date "AAAA-MM-JJ".
De plus, même si ma fonction Date_Converter peut toujours fonctionner, je tiens à vous avertir qu'il peut y avoir des instructions imprécises ci-dessous, veuillez donc ne pas en tenir compte.
La réponse la plus votée est en fait incorrecte!
Le manuel PHP strtotime indique ici que "la fonction s'attend à recevoir une chaîne contenant un format de date anglais". Ce que cela signifie en fait, c'est qu'il attend un format de date américain américain, tel que "mdY" ou "m / d / Y".
Cela signifie qu'une date fournie comme "Ymd" peut être mal interprétée par strtotime
. Vous devez fournir la date dans le format attendu.
J'ai écrit une petite fonction pour renvoyer des dates dans plusieurs formats. Utilisez et modifiez à volonté. Si quelqu'un transforme cela en classe, je serais heureux que cela soit 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
Il existe deux façons de mettre en œuvre 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');
Vous pouvez essayer la strftime()
fonction. Exemple simple:strftime($time, '%d %m %Y');
Utilisez cette fonction pour convertir de n'importe quel format en 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);
}
Ci-dessous, le code PHP pour générer la date de demain en utilisant mktime()
et changer son format au 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);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
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éorganiser les sous-chaînes dans ce cas, c'est une autre façon possible de le faire.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Utilisation simple 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));
Utiliser date_create
etdate_format
Essaye ça.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}