367 votes

Conversion de chaîne en date et date / heure

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.

578voto

Ibu Points 17457

à 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.

526voto

Matthew Points 25748

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.

34voto

user2707671 Points 51

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";

26voto

N.B. Points 4951
 $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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X