J'ai cherché sur Google et essayé plusieurs façons de comparer la date, mais malheureusement, le résultat n'a pas été comme prévu. J'ai l'état actuel des documents suivants:
mysql> select date_format(date(starttime),'%d-%m-%Y') from data;
+-----------------------------------------+
| date_format(date(starttime),'%d-%m-%Y') |
+-----------------------------------------+
| 28-10-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 03-11-2012 |
| 03-11-2012 |
| 07-11-2012 |
| 07-11-2012 |
Je voudrais comparer la date et donc faire comme ceci:
mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
+-----------------------------------------+
| date_format(date(starttime),'%d-%m-%Y') |
+-----------------------------------------+
| 28-10-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 03-11-2012 |
| 03-11-2012 |
| 07-11-2012 |
| 07-11-2012 |
Je pense que le résultat ne devrait pas inclure "28-10-2012". Toute suggestion? Merci d'avance.
Votre format n’est pas fondamentalement triable - vous comparez strings, et la chaîne "28-10-2012" est supérieure à "02-11-2012".
Au lieu de cela, comparez les dates as en tant que dates, puis ne les convertissez que dans le format cible pour la sortie.
Essaye ça:
select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';
(L'entrée doit toujours être sous forme année-mois-valeur, conformément à la documentation .)
Notez que si starttime
est un champ DATETIME
, vous pouvez envisager de modifier la requête pour éviter les conversions répétées. (L’optimiseur est peut-être assez intelligent pour l’éviter, mais cela vaut la peine de vérifier.)
select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';
(Notez qu'il est inhabituel de formater une date avec d-m-Y
pour commencer - il serait préférable d'utiliser y-M-d
en général, étant la norme ISO-8601, etc. Cependant, le code ci-dessus fait ce que vous avez demandé dans la question.)
Utilisez 2012-11-02 au lieu de 02-11-2012 et vous n'aurez plus besoin de date_format ()
Utilisez la méthode suivante:
public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
return round(abs(strtotime($date1)-strtotime($date2))/86400);
}
/* end function dateDiff */
Ça aidera!