PHP: Wie vergleichen Sie einen Zeit-string mit date('H:i')?
Ich habe mal in der Datenbank gespeichert wie 7:30 Uhr als ein varchar-Feld. Ich möchte, um zu überprüfen, wenn diese Zeit größer als die Zeit, die jetzt oder nicht.
Konvertierte ich die DB-Uhrzeit-Zeichenfolge in "19:30" und jetzt will ich etwas wie das hier tun:
$my_time = '19:30';
if($my_time > date('H:i'))
{
do something ...
}
Das problem ist die oben return immer true, wenn $my_time ist eine nicht-leere string.
tun strtotime($my_time)
ist nicht zu helfen, entweder.
strtotime('H:i',$my_time)
macht es 00:00 Uhr .
tun (int)date('H:i')
geben 1700, wenn die aktuelle Zeit ist 17:09, also das entfernen von colon und vergleichen wird nicht funktionieren auch ....
Änderung der Datenbank, wenn Daten aus Frage in diesem Zusammenhang.
plz help. Korrigieren Sie mich, wenn ich sagte, dass einige Fakten falsch.
- Sie sollten mit den einheimischen datetime-Felder anstelle von varchar. Es hätte lösen dieses problem für Sie.
- stackoverflow.com/questions/961074/...
- ich weiß, John... das ist das größte problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese:
date()
gibt einen string zurück, ist es genau so tun:if(date('H:i') == '19:30')
ist es nicht?, das ist die gleiche Sache, die der OP erwähnt versuchen. Das ist, weildate('H:i', strtotime($myTime))
gibt den ursprünglichen $myTime Wert als string!!! Es ist also die gleiche wie eben Putting$myTime
stattdate('H:i', strtotime($myTime))
.also, was ist der Punkt? Ich wirklich nicht bekommen, es. Was bin ich? Warum dieif($my_time > date('H:i'))
die OP schlägt angeblich nicht funktioniert? weil es funktioniert für mich.Können Sie konstruieren eine neue DateTime Objekt, Einstellung der Zeit auf ein zufälliges Datum. Als vergleichen Sie diese beiden Objekte. eg:
Bitte beachten Sie die changelog;
Können Sie nicht verwenden Sie die Vergleichsoperatoren mit Zeichenfolgen wie dass, weil, wenn Sie tun, die Saiten umgewandelt zu bekommen, um zahlen, die erste.
Für eine Einzeiler-Lösung verwenden, können Sie
strcmp
:Den oben genannten Bedingungen ist semantisch äquivalent zu "if $my_time größer ist als die aktuelle Zeit ist", aber nur, wenn das format des strings konstant bleibt! Es ist sehr einfach einzuführen, einen Fehler in diesem code wenn aus irgendeinem Grund das format
$my_time
nicht direkt entsprechen, dieH:i
Muster.Verdummung die Werte werden in strings ist in der Regel nicht die Art, wie Sie gehen über die Verwendung von Datums-und Zeitangaben. Eine geeignete Lösung wäre die Verwendung der nativen
DateTime
Klasse, eingeführt in PHP 5.2.0 (John Conde hat schon ein Beispiel gegeben in seine Antwort).Gibt es jedoch auch einen möglichen Vorteil von der Behandlung mal so dumm Skalare Werte: die Ergebnisse sind konsistent mit der menschlichen Wahrnehmung, 01:00 ist immer später als 00:00 Uhr.
DateTime
Ansätze sind abhängig von der lokalen Zeitzone und Datum, und vielleicht nicht immer die erwarteten Ergebnisse. Beispiel:Sehen Sie es in Aktion.
Das Ergebnis dieser test ist anders als das, was Vergleich einige Skalare Darstellung von "01:00" und "02:00", also ist es eine gute Idee, darüber nachzudenken, was die richtige Semantik für den Vergleich.