2013-03-28 5 views
-1

Voici la sortie d'une base de données et j'essaie d'obtenir le nombre de mois entre la date de début et la date de la base de données. Voici ma sortiePHP strtotime return false

string(10) "12/12/2010" Date : 12/12/2010 - 1292112000 
string(10) "19/04/2000" Date : 19/04/2000 - 
string(10) "08/08/2007" Date : 08/08/2007 - 1186527600 
string(10) "20/06/2011" Date : 20/06/2011 - 

Comme vous pouvez le voir, les deuxième et quatrième timestamp unix sont vides. Je ne sais pas ce qui pourrait causer le problème. Voici le code que j'utilise pour faire écho à ce que vous voyez ci-dessus.

echo "Date : " . $row['startDate'] . " - " . strtotime($row['startDate']) . var_dump($row['startDate']). "<br />"; 
+0

un/séparateur est format US et 20/06 6e jour du mois 20 est une date non valide ... use - separator pour les dates britanniques - http://www.php.net/manual/fr/datetime.formats.date.php –

Répondre

8

De the manual:

dates dans le m/j/formats y ou DMY sont désambiguïsé en regardant le séparateur entre les divers composants: si le séparateur est un slash (/) , alors l'américain m/d/y est supposé; tandis que si le séparateur est un tiret (-) ou un point (.), alors le format européen d-m-y est supposé.

Pour éviter toute ambiguïté, il est préférable d'utiliser les dates ISO 8601 (AAAA-MM-JJ) ou DateTime :: createFromFormat() si possible.

+3

+1 pour avoir lu le manuel. – Kermit

1

résolu le problème, je certaines des nouvelles fonctions de PHP 5.3 DateTime dans

$originalDate = str_replace("/", "-", $row['startDate']); 
$date1 = new DateTime($originalDate); 
$date2 = new DateTime('now'); 

$interval = date_diff($date1, $date2); 

echo "Months" . $interval->format('%m') . ($interval->format('%y') * 12) . "<br />"; 
+0

vous str_replace sauvé une tonne de temps, merci l'homme –