DS erkennt php Code nicht

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Harry_89

Benutzer
Registriert
07. März 2010
Beiträge
254
Reaktionspunkte
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
 
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.
 
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.
 
dann mach doch mal
PHP:
$Zeitumstellung = date("I",(int)$Zeit); 
var_dump($Zeitumstellung);
exit;
?hat diese Var also den erwarteten Wert?

 
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.
 
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; 
}
 
Das war jetzt nur ein blöder copy paste Fehler. :D
Das i steht schon da. gg
 
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')
 
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.
 
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
 
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:
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
 
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 :-)
 
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.
 
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
 
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);
 
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
 
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