DS erkennt php Code nicht

Status
Für weitere Antworten geschlossen.

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe ein kleines Problem mit meiner Datenimportierung.

Heute Nacht war ja Zeitumstellung und seitdem funktioniert mein Code nicht mehr richtig.

Ich hole mir einmal am Tag die LogDaten von unserer Photovoltaik Anlage und importiere diese.

Nur ist hier das Problem, dass unser Wechselrichter nicht einen Zeistempel verwendet sondern die Sekunden seit Betriebsbeginn der Anlage Zählt.
Eigentlich kein Problem aus diesem Wert das Datum herauszurechnen.
Aber seit der Zeitumstellung soll eben 3600 hinzugezählt werden.

Dies habe ich so gelöst.

$Zeit ist schon der richtige Zeistempel vom heutigen Tag zb.


PHP:
$Zeitumstellung = date("I",(int)$Zeit);

if ($Zeitumstellung == 1)
{
	$NeueZeit = $Zeit + 3600;
}
else
{
	$NeueZeit = $Zeit;
}

$Datum = date("Y-m-d H:i:s",(int)$NeueZeit);

$Datum wird anschließend in die DB import.

Wenn ich das ganze Local mit xmapp mache klappt alles.
Lasse ich das Script hingegen von der DS durchlaufen funktionierts nicht mehr.

Kann mir bitte wer dabei helfen mein Problem zu lösen?

Vielen Dank
 

Holgo

Benutzer
Mitglied seit
22. Jul 2011
Beiträge
265
Punkte für Reaktionen
0
Punkte
0
Was funktioniert denn genau nicht? Werden die Daten nicht eingetragen, werden falsche Daten eingetragen und was für eine Fehlermeldung kommt, falls eine kommt? Manchmal fehlt einfach nur ein Komma oder ein Apostroph ist zuviel oder zu wenig im Query und dann spielt die ganze Datenbank nicht mit. Übrigens mache ich sowas ganz anders. Wenn ich Zeiten in eine Datenbank schreibe, schreibe ich immer einfach den Zeitstempel selbst rein. Nichts Formatiertes oder so. Was dann wie angezeigt werden soll, kann man dann ja in dem Dokument definieren, welches die Ausgabe macht.
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Nein alles läuft eigentlich wie es soll.
Keine Fehlermeldungen oder sonstiges.
Nur er zählt mir die Extra Stunde die wir ja jetzt seit der Zeitumstellung haben nicht hinzu.
Fast so als überspringt er die if Abfrage.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
dann mach doch mal
PHP:
$Zeitumstellung = date("I",(int)$Zeit); 
var_dump($Zeitumstellung);
exit;
?hat diese Var also den erwarteten Wert?

 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Wenn ich das machen kommt nur

Durch herumprobieren habs ich jetzt irgendwie hibekommen.
Wobei mir noch nicht klar ist wieso.

PHP:
$Zeitumstellung = date("I",(int)$Zeit);

f ($Zeitumstellung == 1)
{
	$NeueZeit = $Zeit + 3600;
}
else
{
	$NeueZeit = $Zeit + 3600;
}

$Datum = date("Y-m-d H:i:s",(int)$NeueZeit);

Das macht ja Null Sinn.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
also genau obiges Code macht nicht mehr als einen PHP-Fehler. Da fehlt ein i vor dem f ;-) Und so kannst du gleich auf if/else verzichten und immer + 3600 machen :)
Teste mal so
PHP:
$Zeitumstellung = date("I",(int)$Zeit); 

if ($Zeitumstellung == 1) 
{
    die('Klappt');
    $NeueZeit = $Zeit + 3600; 
} 
else 
{ 
    die('Klappt ned');
    $NeueZeit = $Zeit + 3600; 
}
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Das war jetzt nur ein blöder copy paste Fehler. :D
Das i steht schon da. gg
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
probier doch bitte trotzdem meinen Codeschnippel oben. Es muss 'Klappt' ausgegeben werden, wenn ich dich richtig verstanden habe
Und mach auch gleich if($Zeitumstellung == '1')
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Ich habe jetzt das heutige File genommen.
Also wo die Zeitumstellung schon greifen sollte.

Hier erhalte ich "klappt"

Wenn ich aber ein File vor der Zeitumstellung verwende
zb: 05.03.2012

Dann steht ebenfalls klappt da.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
dann ist $zeit wohl aber das aktuelle Datum und dieses kann nicht gleichtzeitig in Sommerzeit und Winterzeit sein. Bist du 150% sicher, dass sich in $zeit der korrekte Timestamp (05.03.2012) befindet?
Mach mal zur Sicherheit
PHP:
var_dump(date('r',$zeit));
und kontrollier das Datum in beiden Fällen
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Ja da bin ich mir zu 1000% sicher.

Hab jetzt einfach Pauschal nochmals überall 3600 hinzugefügt und es kommt jeweil vor und nach der Zeitumstellung das richtige.

Wies den anschein hat schaltet der Wechselrichter selbst die Zeitumstellung auf den Wert auf.
Wobei man keine Einstellungen vornehmen kann bezüglich Datumseinstellungen an dem Ding.

Als Ausgabe erhalte ich bei beiden

string(31) "Thu, 01 Jan 1970 01:00:00 +0100"
 
Zuletzt bearbeitet:

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
So ich hab die ganze If Abfrage weck gelassen und einfach generell 3600 Sekunden hinzugezählt.

Habs dann einmal mit dem File vom 04.03.2012 getestet.
An diesem Tag war um ca. 17:30 Uhr der letzte Sonnenstrahl zu verzeichnen und um 7 Uhr der Erste.
Sollte stimmen.

Dann hab ichs nochmals mit dem File von heute getestet.
Dort habe ich den Ersten Eintrag um 8:15 Uhr ungefähr und den letzen um 19:15 Uhr.
Dürfte also auch stimmen.

Eigentlich sind alle Werte so realistisch.
Aber irgendwas leuchtet mir da nicht ein
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
string(31) "Thu, 01 Jan 1970 01:00:00 +0100"
das heisst $zeit ist zum Zeitpunkt des var_dump() schlicht 0. Dieses Datum ist der Beginn der Unix-Zeitepoche (dort beginnt der Timestamp mit 0). Was aber u.U. daran liegen könnte, dass ich $zeit geschrieben habe und du $Zeit hast :)
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
hehe das wars. :)

Jetzt hab ich das Z groß geschrieben und er zeigt mir Werte an.
string(31) "Tue, 06 Mar 2012 07:00:14 +0100"
und
string(31) "Sun, 25 Mar 2012 08:15:14 +0200"

Was soll dass nun bedeuten?

Zu beachten.
Es sind schon die 3600 hinzugefügt worden.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ich wollte nur sichergehen, dass die Timestamps stimmen. Und die sind korrekt: im Winter sind wir ja nur UTC+1 und im Sommer UTC+2
Wenn du die Timestamps inkl Zeitzone resp Offset zu UTC hast, dann musst du eigentlich nichts mehr addieren. PHP sollte die Sommer/Winterzeit automatisch beachten
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Wie sollte php das von selber erkennen?

Ich hab das einfach so gelöst

PHP:
$Datum = date("Y-m-d H:i:s",(int)$Zeit);
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
dass es php erkennt siehst du daran, dass du beim Testcode einmal UTC+1 (Winterzeitdatum) und einmal UTC+2 (Sommerzeitdatum) hast d.h. php hat die Sommer/Winterzeit anhand des Timestamps erkannt
 

Harry_89

Benutzer
Mitglied seit
07. Mrz 2010
Beiträge
254
Punkte für Reaktionen
0
Punkte
0
Dann kann eigentlich nur noch übrig bleiben das ich mich bei der ursprünglichen Berechnung vertan habe und eine Stunde übersehen habe.

Danke für die Hilfe jahlives. :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat