• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

SQL-Datenbank - Temperatur vor einem Jahr aus Cumulus auslesen?

Begonnen von Wetterfrosch1971, 23.01.2016, 14:30:06

⏪ vorheriges - nächstes ⏩

wneudeck

Hallo,
als nicht Betroffener:
ZitatIch persönlich würde da wohl auch die Variante der "- - -" wählen
So sehe ich das auch. Ich habe beispielsweise einen Ticker auf meiner Wetterseite, der von Meteohub gespeist wird. Und wenn der Mal, aus irgendwelchen Gründen keinen Wert liefert, würde dann im Ticker die entsprechende Variable ([actual_th0_temp_c:--], die den Wert erzeugt erscheinen, also sehr unschön. Auch da habe ich zu der Lösung "---" gegriffen.

Wetterfrosch1971

Hallo,

bei mir als "Betroffener" sieht das so aus:

Das Script vergleicht ja das aktuelle Datum (minus 1 Jahr) mit dem Datum des letzten Jahres über eine if/else Bedingung, d.h. findet das Script einen Treffer, wird die Anweisung unter "if" ausgegeben (= die Temperatur des letzten Jahres wird ausgegeben), gibt es keinen Treffer (wie z.B. dieses Jahr am 29.02.), dann wird die "else-Bedingung" ausgeführt und über diese Bedingung gebe ich einfach ein leeres Feld aus, d.h. auf meiner Webseite wird dann an diesem Tag einfach der komplette Eintrag "Temperatur von vor einem Jahr ...°C" nicht angezeigt.

Denke das ist die einfachste und auch logischste Möglichkeit und dass nun an einem einzigen Tag dieser Wert mal fehlt, finde ich kein Beinbruch, denn es gibt ihn ja in Wirklichkeit auch nicht.
Klar könnte man nun entweder auf den 28.02. oder 01.03. zugreifen (korrekt wäre ja der 01.03., denn dieser war genau ein Jahr vor dem 29.02. des aktuellen Jahres Tage), doch wenn man das so genau nimmt, dann müsste ich ab dem 29.02. ja genau genommen immer 364 Tage abziehen um den genauen Vergleichswert zu bekommen, denn z.B. war ja genau 1 Jahr vor dem 01.03.2016 der 02.03.2015 (da 2016 ab dem 29.02. ja ein Tag mehr hat) doch ich denke, das ist dann zu penibel genau.

Ich vergleiche einfach den heutigen Tag nach Datum und Uhrzeit mit dem gleichen Datum und Uhrzeit des vergangenen Jahres und den 29.02. gibt es dabei schlicht und einfach nicht und deswegen wird an diesem Tag kein Wert ausgegeben.


TheWeather

Nicht, weil ich drauf rumreiten will, aber doch noch eine Frage zum Verständnis, was es mit dem Eintrag ' - 1 year' bei der Funktion strtotime auf sich hat.
Zitat von: webworker am 27.01.2016, 19:40:48
<?php  $now  = time(); // Timestamp mit genauen Sekunden  $now -= $now % 60; // Timestamp gerundet auf Sekunde 0  $past = strtotime(date('d-m-Y H:i', $now) . ' - 1 year'); // gerundeter Timestamp - 1 Jahr?>

Wird da von der in $now enthaltenen Jahreszahl direkt ein Jahr abgezogen (also Jahreszahl - 1) oder werden an dem TimeStamp in der Regel die einem "normalen" Jahr (365 Tage * 86400 sec/Tag) entsprechenden sec abgezogen? Anders gefragt: Wie definiert PHP den Zeitraum "1 Jahr"? Weiß PHP, ob es normal 365 Tage oder in einem Schaltjahr ab dem 29.02. nun 366 Tage abziehen muss, um auf das gleiche Datum, nur ein Jahr zuvor, zu kommen?

Die Frage klingt vielleicht "blöde", aber welches Datum kommt denn dabei heraus, wenn man $past ebenfalls anzeigen würde?  ;) Nicht dass hier Daten vom Vortag eines heutigen Datums (vor einem Jahr) als Vergleich zum heutigen Datum angegeben würden.

Das ist nicht wirklich entscheidend, aber wenn's jemand weiß (webworker?), würde mich das generell interessieren (1 Jahr ist ja keine genau definierte Zeitangabe im Sinne eindeutig definierbarer Zeitabschnitte).

Gruß Hans
2xTFA Nexus, Sinus, Duo, EOS Max, Klima-Logger, Mebus TE923

Die Titanic wurde von Profis gebaut, die Arche Noah von einem Amateur. ...

Wetterfrosch1971

Hallo Hans,

also ich kann zumindest soviel aussagen, dass das Script funktioniert, habe die ausgegebenen Temperatur-Werte verglichen, es sind exakt die Temperatur-Werte die exakt heute vor einem Jahr waren, d.h. die Funktion "-1 year" funktioniert.

Wie das Script jedoch beim aktuellen Datum das "-1 year" verarbeitet, weiß ich nicht, doch dazu kann sicherlich webworker mehr aussagen.

Gruß Frank


wneudeck

#24
Hallo Hans,
Zitataber welches Datum kommt denn dabei heraus, wenn man $past ebenfalls anzeigen würde?
ich antworte mal so ganz profan: PHP weiß zeitmäßig alles und berücksichtigt auch alles.
Was heißt das für das genannte Beispiel (habe es mal schnell durchlaufen lassen:
Wenn Du das oben genannte script ausführst und die Werte mit 'echo' ausgibst, erhältst Du zunächst natürlich nur den Unix-Timestamp (Beispiel ist natürlich auf den Zeitpunkt bezogen, an dem ich das skript jetzt gerade habe laufen lassen )

Der Wert $now erbringt
1454004474
und der Wert $past erbringt
1422468420
Das hilft Dir zunächst gar nichts, aber PHP weiß, was gemeint ist.
Und wenn Du nun wiederum, was für die Berechnung nicht notwendig ist, aber damit Du einen Antwort auf Deine Frage hast, diese Werte in unser Zeitformat wandelst, erhältst Du für den Wert $now
28.01.2016 - 19:07:54
und für den Wert $past (und das ist ja Deine Frage)
28.01.2015 - 19:07:00
(weil ja auf Sekunde Null gerundet wird)
Fazit:
Wer mal ein bisschen mit PHP gearbeitet hat (und ich bin da eher noch ein Stümper) wird mit Erstaunen feststellen, dass sich damit Dinge machen lassen, die man nicht für möglich hält.
Du brauchst ja nur mal die Seite
http://www.selfphp.de/funktionsreferenz/index.php
aufrufen und Du wirst staunen.

TheWeather

#25
Hallo Werner, Du hast "meine Problemstellung" zumindest erfasst.

Ich kann's selbst leider nicht ausprobieren, weil ich erst am Anfang bin, mich mit PHP befassen zu wollen. Wenn ich Dich nochmal nerven darf - Was ergibt der gleiche Test für den 29.02.2016 und mit etwas Abstand am 18.03.2016? Es mag ja sein, dass PHP das "intern" vorzüglich löst, ich möchte aber auch verstehen, wie ...

Da hilft mir der Link vom letzten Beitrag erstmal weniger (ich hab' schon mal rein geschaut), da braucht's für mich eher einen knallharten Beweis, dass "1 Jahr" tatsächlich auch das Vorjahresdatum tatsächlich trifft - auf Sekunden kommt's hier nicht natürlich nicht an. Wie gesagt, "1 Jahr" ist keine anerkannte Zeitspanne, die irgendwo exakt festgelegt wäre.

Sorry, wenn ich wegen einer solchen Kleinigkeit nerve, aber ich will's ja auch verstehen ...

Gruß Hans

P.S.: Andererseits, wenn ich mal selbst etwas fitter in PHP bin, kann ich's ja selbst herausfinden. Sooo dringend ist es ja nicht. Wenn's niemand auf Anhieb beantworten kann, ist das nicht weiter schlimm. Ich hab' halt auch diese Frage mal in den Raum gestellt, mehr nicht.
2xTFA Nexus, Sinus, Duo, EOS Max, Klima-Logger, Mebus TE923

Die Titanic wurde von Profis gebaut, die Arche Noah von einem Amateur. ...

WeatherCrack

Und ich frage mich, was da wohl am 29.02.2016 (ich hab da nicht Geburtstag  :D  ) passiert?

LG
WeatherCrack

falk

Zitat von: TheWeather am 28.01.2016, 20:01:39
P.S.: Andererseits, wenn ich mal selbst etwas fitter in PHP bin, kann ich's ja selbst herausfinden. Sooo dringend ist es ja nicht.

Das ist doch eine berechtigte Frage. Mit der interaktiven Shell (php -a) lässt sich das schnell prüfen.

echo date("Y-m-d", strtotime("2016-02-28 -1 year")); => 2015-02-28
echo date("Y-m-d", strtotime("2016-02-29 -1 year")); => 2015-03-01
echo date("Y-m-d", strtotime("2016-03-01 -1 year")); => 2015-03-01
echo date("Y-m-d", strtotime("2016-03-02 -1 year")); => 2015-03-02


wneudeck

Hallo Hans,
falk ist mir freundlicherweise zuvorgekommen.
Nun also nur noch die Antwort zu Deiner letzten Frage:
Zitatund mit etwas Abstand am 18.03.2016
Das ergibt dann natürlich
2015-03-18


TheWeather

Hallo falk und Werner,

viele Dank für eure Hilfe. Jetzt hab' ich's kapiert ...

Für die Aufgabenstellung von Frank (wetterfrosch1971) heißt das aber, dass die Daten am 29.02.2016 (automatisch) mit denjenigen vom 01.03.2015 verglichen werden. Das ist ja auch so in Ordnung, dann gibt es aber auch am 29.02.2016 einen Treffer im Vorjahr (nämlich den 01.03.2015) und die Anzeige bleibt nicht leer (oder "---").

Viele Dank nochmal.

Gruß Hans
2xTFA Nexus, Sinus, Duo, EOS Max, Klima-Logger, Mebus TE923

Die Titanic wurde von Profis gebaut, die Arche Noah von einem Amateur. ...