PHP SQL Select aktueller Tag

DonConto

Commander
Registriert
Juli 2004
Beiträge
2.246
Hallo!

Ich brauche mal wieder ein wenig Hilfe :-)

In eine SQLite Tabelle werden über den Tag Daten geschrieben. U.a. sind diese Daten mit diversen Zeitstempeln versehen. Es gibt: Die Zeit (09:54:03), das Datum (2016-08-13) und den Unix Timestamp dazu (1471082043). Alle Zeitstempel sind UTC.

Eine Webseite ruft mittels PHP die Daten ab. Aktuell mache ich ein einfaches SELECT * FROM DB WHERE date = date(now). Der Schönheitsfehler dabei ist, dass mir 2 Stunden fehlen weil die Daten bei UTC+2 ermittelt werden, aber einen UTC Zeitstempel bekommen. D.h. Nachts zwischen 0 und 2 Uhr bekommen die Daten einen Zeitstempel vom Vortag. Das ist für mein Ergebnis egal (weil Nachts die Werte eh immer 0 sind *g*), aber schön ist das trotzdem nicht. Das wollte ich jetzt korrigieren. Allerdings google ich immer an der Antwort vorbei :-)

Frage: Wie würde ein korrekter SELECT aussehen um alle Daten des aktuellen Tages auszulesen. Lösen würde ich das so:

1) Timestamp für 0 Uhr ermitteln
2) Umrechnen auf localtime (unter Berücksichtigung von Sommer/Winterzeit)
3) 24 Stunden dazu packen
4) alle Werte dazwischen per Select abfragen.

Ich scheitere bei 1) und 2). 3) und 4) traue ich mir wieder zu :-) Jaja, das ist auch der einfache Teil *g*

Für jegliche Lösungen oder Denkanstöße wäre ich dankbar.
 
1) $timestamp = strtotime('22-09-2008');
2) Nachsehen wieviele Stunden wir abweichen, etc. 3600 pro Stunde dazuaddieren/abziehen
3) (24*3600) - 1
 
Danke, das Ergebnis sieht jetzt so aus, wie ich mir das vorstelle. Da habe ich tatsächlich vorbei gegoogelt :-)
 
Mit Timestamps herumzurechnen kann äußerst fehleranfällig sein. So musst du in deinem Fall schon einigen Aufwand treiben, um die Sommer- und Winterzeit zu berücksichtigen. Bei längeren Zeiträumen kommen dann noch Schaltjahre hinzu. Und wenn es sogar auf Sekunden ankommt, dann muss man sogar an Schaltsekunden denken.

Deshalb würde ich so viel wie möglich den eingebauten Funktionen der Programmiersprache überlassen. Ich deinem Fall könnte das wie folgt aussehen:
Code:
SELECT * FROM tabelle WHERE DATE(zeitstempel, 'unixepoch', 'localtime') = DATE('now')
 
Da hast du wohl recht. Habe dein Beispiel ausprobiert. Funktioniert :-) Vielen Dank.
 
Zurück
Oben