Si j'ai une chaîne dans le format mm-dd-YYYY
comme le 16/10/2003 dans PHP, comment puis-je convertir cela en Date
puis en DateTime
le format de YYYY-mm-dd
. La seule raison pour laquelle je demande à la fois Date
et DateTime
est que j'ai besoin de l'un à un endroit et l'autre dans un endroit différent.
Réponses
Trop de publicités?à l'aide de la fonction strtotime() sur votre première date date('Y-m-d') à convertir:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Mise à JOUR:
Ne faites pas qu'il existe une différence entre l'utilisation de la barre oblique /
et le trait d'union -
dans la fonction strtotime. pour citer php.net
Les Dates dans le m/d/y ou d-mes formats sont analysées en regardant le séparateur entre les différentes composants: si le séparateur est un la barre oblique (/), puis l'Américain m/d/y est supposé; que, si le séparateur est un le tiret (-) ou un point (.), puis le Européenne d-mon format est pris en charge.
Vous devez être prudent avec les formats m / d / Y et mdY. PHP considère /
à m / d / Y et -
à la moyenne de dMY. Je décrirais explicitement le format d'entrée dans ce cas:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
De cette façon, vous n'êtes pas à la merci d'une certaine interprétation.
Pour analyser la date, vous devez utiliser: DateTime :: createFromFormat ();
Ex:
$dateDE = "16/10/2013";
$dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
Cependant, attention, car cela va planter avec:
PHP Fatal error: Call to a member function format() on a non-object
Vous avez réellement besoin de vérifier que le formatage s'est bien passé, d'abord:
$dateDE = "16/10/2013";
$dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE);
if (!$dateObj)
{
throw new \UnexpectedValueException("Could not parse the date: $date");
}
$dateUS = $dateObj->format("m/d/Y");
Maintenant, au lieu de planter, vous obtiendrez une exception que vous pourrez attraper, propager, etc.
$ dateDE a le mauvais format, il devrait être "16.10.2013";
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Edit: vous pouvez également passer un constructeur DateTimeZone à DateTime () pour vous assurer de la création de la date pour le fuseau horaire souhaité, et non du serveur par défaut.