2009-08-14 5 views
10

Si j'ai une chaîne de date:PHP Parse Date de chaîne

$date = "08/20/2009"; 

Et je veux séparer chaque partie de la date:

$m = "08"; 
$d = "20"; 
$y = "2009"; 

Comment puis-je faire?

Y at-il une fonction de date spéciale que je devrais utiliser? Ou autre chose?

Merci!

Répondre

14

explode fera l'affaire pour que:

Sinon, vous pouvez le faire en une ligne (voir les commentaires - merci chanceux):

list($m, $d, $y) = explode("/", $date); 
+5

($ m, $ d, $ y) = explode ("/", $ date); – Lucky

+0

@Lucky - merci, édité en. –

18

Une façon serait de faire :

$time = strtotime($date); 
$m = date('m', $time); 
$d = date('d', $time); 
$y = date('Y', $time); 
+0

ARGH! Tu m'as battu! lol – Daniel

+1

Ah, mais votre réponse est plus robuste. –

+4

Strtotime ne fonctionne pas toujours à cause de la contrainte d'horodatage. Dites que vous voulez analyser World War I, vous ne pouvez pas convertir 28/08/1914 en un horodatage valide. –

2

Est-ce toujours comme ça? Ou sera-ce dans n'importe quel format de fichier?

Essayez strtotime.

Quelque chose comme:

if(($iTime = strtotime($strDate))!==false) 
{ 
echo date('m', $iTime); 
echo date('d', $iTime); 
echo date('y', $iTime); 
} 
-3

La réponse de Dominic est bon, mais IF la date est toujours dans le même format que vous pouvez utiliser ceci:

$m = substr($date,0,2); 
$d = substr($date,3,2); 
$y = substr($date,-4); 

et ne pas avoir à utiliser un tableau ou exploser

Bill H

+0

S'il vous plaît, non! Pensez au futur lecteur de code :) – GiDo

+0

Pourquoi voudrait-on éviter l'explosion? * SI * la date est * TOUJOURS * dans le même format, exploser fonctionnera parfaitement, et comme le suggère @GiDo, sera auto-documenté en termes d'intention. Si l'on veut éviter le tableau, alors lister les éléments sur des variables distinctes. – Sepster

1

que diriez-vous:

list($m, $d, $y) = explode("/", $date); 

une rapide doublure.

6

Découvrez PHP date_parse function. Sauf si vous êtes sûr que l'entrée sera toujours dans un format cohérent, et vous le validez d'abord, c'est beaucoup plus stable et flexible, (pour ne pas mentionner plus facile), pour laisser PHP essayer d'analyser le format pour vous.

par exemple.

<?php 
//Both inputs should return the same Month-Day-Year 
print_r(date_parse("2012-1-12 51:00:00.5")); 
print_r(date_parse("1/12/2012")); 
?> 
3

Si vous avez un format donné vous devez utiliser un objet date.

$date = DateTime::createFromFormat('m/d/Y', '08/20/2009'); 
$m = $date->format('m'); 
$d = $date->format('d'); 
$y = $date->format('Y'); 

Notez que vous pouvez certainement utiliser un seul appel à DateTime::format().

$newFormat = $date->format('d-m-Y'); 
0

Pour l'analyse syntaxique date internationalisé, voir IntlDateFormatter :: parse - http://php.net/manual/en/intldateformatter.parse.php

Par exemple:

$f = new \IntlDateFormatter('en_gb', \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE); 
$dt = new \DateTime(); 
$dt->setTimestamp($f->parse('1/2/2015')); 
liste