363 votes

Convertir un format de date dans une autre en PHP

Y a-t-il un moyen simple de convertir un format de date dans un autre format de date en PHP ?

J’ai ceci :

Mais j’aimerais bien sûr qu’il revienne une date actuelle plutôt que la fissure "aube de l’o. Ce que je fais mal ?

313voto

Pekka 웃 Points 249607

Le deuxième paramètre date() doit être un bon timestamp (secondes depuis le 1er janvier 1970). Vous passez une chaîne de caractères, qui date() ne peut pas reconnaître.

Vous pouvez utiliser la fonction strtotime() pour convertir une date en chaîne de caractères dans un horodatage. Cependant, même la fonction strtotime() ne reconnaît pas l' y-m-d-h-i-s format.

PHP 5.3 et

Utiliser DateTime::createFromFormat. Il vous permet de spécifier une valeur précise de masque - à l'aide de l' date() de la syntaxe pour analyser entrant chaîne de dates avec.

PHP 5.2 et inférieur

Vous aurez à analyser les éléments (année, mois, jour, heure, minute, seconde) manuellement à l'aide d' substr() et à main les résultats de mktime() qui permettra de vous construire un timestamp.

Mais c'est beaucoup de travail! Je recommande d'utiliser un autre format strftime() peut comprendre. strftime() comprend toute date d'entrée court d' the next time joe will slip on the ice. par exemple, cela fonctionne:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   

119voto

ceiroa Points 1426

La façon la plus simple de le faire est

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

Vous êtes le premier de lui donner le format $dateString est dans. Puis vous indiquez le format que vous voulez $newDateString.

Cela permet aussi d'éviter l'utilisation de la fonction strtotime, ce qui peut être difficile à certains moments.

Si vous n'êtes pas la transformation d'un format de date à l'autre, mais juste envie de la date courante (ou de type datetime) dans un format spécifique, alors il est encore plus facile:

$now = new DateTime();
$timestring = $now->format('Y-m-d h:m:s');

Cette question renvoie aussi à la même rubrique: PHP: convertir le format de date aaaa-mm-jj => jj-mm-aaaa [PAS DANS SQL].

57voto

John Conde Points 102874

Les Bases

Le simplist moyen de convertir un format de date à l'autre est d'utiliser strtotime() avec date(). strtotime() vous permet de convertir la date en Timestamp Unix. Que le Timestamp Unix, peut alors être transmis à l' date() de la convertir au nouveau format.

$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);

Ou comme un one-liner:

$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));

Gardez à l'esprit que strtotime() nécessite la date dans un format valide. À défaut de fournir un format valide entraînera strtotime() retour faux qui sera la cause de votre date 1969-12-31.

À l'aide de DateTime()

Depuis PHP 5.2, PHP offert l' DateTime() de la classe qui nous offre des outils plus puissants pour travailler avec des dates (et le temps). Nous pouvons réécrire le code ci-dessus à l'aide de DateTime() comme:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = date->format('Y-m-d H:i:s');

Travailler avec des timestamps Unix

date() prend un Unix timeatamp comme second paramètre et retourne une date formatée pour vous:

$new_date_format = date('Y-m-d H:i:s', '1234567890');

DateTime() fonctionne avec des timestamps Unix par l'ajout d'un @ avant le timestamp:

$date = new DateTime('@1234567890');
$new_date_format = date->format('Y-m-d H:i:s');

Travailler avec des non-standard et ambiguës, les formats de date

Malheureusement, pas toutes les dates qu'un développeur a à travailler avec sont dans un format standard. Heureusement, PHP 5.3, nous a fourni une solution pour cela. DateTime::createFromFormat() nous permet de dire à PHP quel est le format d'une chaîne de date de sorte qu'il peut être correctement analysé dans un objet DateTime pour plus de manipulation.

$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = date->format('Y-m-d H:i:s');

En PHP 5.4, nous avons acquis la capacité de faire de membre de la classe d'accès sur l'instanciation a été ajoutée, ce qui nous permet de transformer nos DateTime() code dans un one-liner:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

Malheureusement, cela ne fonctionne pas avec DateTime::createFromFormat() encore.

29voto

Sarfraz Points 168484

Essayez ceci :

10voto

Rifat Points 3394
<pre><code></code><p>vous faites mal ici, cela devrait être</p><pre><code></code></pre><p>séparateur de temps est ' :'</p><hr><p>Je pense que cela aidera...</p><pre><code></code></pre><p>OU</p><hr><pre><code></code></pre></pre>

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