2011-08-08 4 views
1

J'ai actuellement une date qui est stockée dans ma base de données SQL en tant que VARCHAR de 255 caractères. J'ai déclaré cette chaîne commeComparaison de date en PHP

//within an object... 
    $date = date(DATE_RFC822); 

Maintenant, plus tard dans le codage, je me rends compte que j'ai vraiment besoin de comparer les dates entre elles. Ma tentative initiale, très naïf ressemblait un peu à ceci:

if(object_1->date > object_2->date){ 
//do this that assumes that object_1 was created at a later date than object_2 
}else{ 
continue; 
} 

Alors que cela a bien fonctionné à différents moments de la même journée; en utilisant le code une semaine plus tard a commencé à montrer des bugs importants.

Répondre

3

strtotime() convertit une chaîne en temps unix (un entier) qui peut facilement être comparé à d'autres valeurs de temps unix. Si vous utilisez PHP 5.2.8 ou supérieur, vous pouvez également utiliser la classe DateTime qui est relativement facile à comparer (voir this question pour plus d'informations)

1

Vous ne pouvez pas comparer les dates au format DATE_RFC822 les unes avec les autres. Vous devez utiliser les champs Date ou DateTime dans les timestamps MySQL et DateTime ou Unix en PHP. Il est prudent d'utiliser votre chaîne DATE_RFC822 dans le constructeur PHP DateTime ou dans strtotime(). (Pourtant, si vous utilisez Date ou DateTime dans MySQL, vous pouvez également trier par date et rechercher par date, etc.)

PHP Les objets DateTime peuvent être comparés les uns aux autres comme les variables PHP normales, donc vous pouvez faire $date1 < $date2 pour déterminer si $date1 est avant $date2.