J'ai trouvé des centaines de questions et réponses pour des sujets similaires à cela. Cependant, aucun ne correspond à mes besoins spécifiquement et je suis excentré.
J'ai une variable au format YMD et j'ai besoin de voir s'il a été créé Lors de la journée de calendrier précédente (pas 24 heures précédentes, mais sur le jour civil précédent). p>
IE. $ Tdate = '12 -05-2 '; p>
Si l'objet créé le 2 mai 2012 à 23h59 (heure stockée), j'ai besoin d'une comparaison au 3 mai 2012 12:01 (heure actuelle) Pour égaler true. P>
Si l'objet créé le 2 mai 2012 à 23h51 (heure stockée), j'ai besoin d'une comparaison au 2 mai 2012 à 23h58 (heure actuelle) pour égaler false. p>
Je sais que si ceux-ci ont été stockés dans un DB MySQL et tiré d'un champ, MySQL pourrait comprendre cela facilement. Dans ce cas, cependant, cette solution n'est pas une option. P>
Cette comparaison doit être entièrement effectuée en PHP. P>
Je sais que c'est une question excentrique, mais hé, c'est ce que c'est ce que le gourou À Stackoverflow Excel à! Hâte de voir les réponses! P>
update em> p> a compris cela comme: p> est Il y a une solution plus efficace? Semble fonctionner, mais je crains qu'il doit y avoir une solution plus optimale / élégante? P> résolu fort> em> p> $tHolder = '12-05-12';
$voteDate = date("y-m-d", strtotime($tHolder));
$today = date("y-m-d", strtotime("today"));
if ($voteDate === $today)
{
echo "this was today's post";
}
elseif ($voteDate < $today)
{
echo "this was previous to today";
}
3 Réponses :
Tout d'abord - je ne pense pas que vos "solutions" fonctionne. Ce qui se passe lorsque la date d'aujourd'hui est du 12-06-01 et que le message était sur le 12-05-31 - il donnera la mauvaise réponse car "31"> "1"
De toute façon - Je pense que la bonne réponse est la suivante: p>
Devait faire quelques modifications, l'enregistré et le mettre à jour de la question. Merci!
Vous pouvez convertir les deux dates vers UNIX Time, puis le comparer en tant qu'Ètateurs:
$day_start = strtotime('-1 day', mktime(0, 0, 0); $day_finish = strtotime('-1 day', mktime(23, 59, 59); $dT = strtotime('-1 day', $dTime) if($dT > $day_start && $dT < $day_finish) { var_dump($dT); } else { exit; }
Non - parce que cela ne dit que si la date était avant / après l'autre jour - pas si c'était "hier"
Si vous cherchez réellement "Publié x X jours":
$datetime1 = new DateTime('2012-05-01'); $datetime2 = new DateTime('2012-05-02'); $interval = (int)$datetime1->diff($datetime2)->format('%a'); switch ($interval) { case 0: echo "Posted Today<br />"; break; case 1: echo "Posted $interval day ago<br />"; break; default: echo "Posted $interval days ago<br />"; }
J'aime ta solution par là est un problème. Il n'y a pas de différence si la deuxième date est hier ou demain (dans les deux cas, il est 1)
Figuré cela comme: $ dtest = '12 -05-02 '; $ dtest = exploser ('-', $ dtest); $ dtest2 = date ('y-m-d'); $ dtest2 = exploser ('-', $ dtest2); Si ($ dtest [2] <$ dtest2 [2]) {ECHO '
Posté hier
'; } else {echo '
posté aujourd'hui
'; } Y a-t-il un moyen plus élégant de faire cela?
Gah, le formatage du code ne fonctionne pas dans les commentaires!
Je vais tester ces réponses aujourd'hui et choisir la meilleure réponse. Lors de la numérisation des extraits de code chaque envoyé, ils font tous un bon travail de comparaison des dates de la façon dont je cherche. Encore une fois, acceptera / postera mes résultats bientôt!