• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Zeitdifferenz in Sekunden - PHP

Bartspritze

Gelegenheitsspieler/in
Mitglied seit
16.10.2004
Beiträge
201
Reaktionspunkte
0
Huhu,

Ich habe in einer .txt Datei einen Status (0 oder 1) stehen und danach das Datum im folgendem Format:

0_2008.12.04_12:35:20

also: status_jahr.monat.tag_stunde:minute:sekunde


Diese Zeile möchte ich in PHP mit folgenden Zeilen auslesen:
Code:
$datei = fopen('../logs/log_57603.txt','r') or die ("Kann Datei nicht lesen.<br>");
$test = "";
while (!feof($datei))
{
	$zeile = fgets($datei,1024);
}

nun gibt mir die var. $zeile diese obenstehende Zeile aus.

Soweit kein Problem, nun aber:

Ich möchte mit dem Datum die Diferenz in Sekunden zu einem weiteren Datum messen, welches Zeitlich gesehen nach dem oben stehenden kommt.
Dabei dachte ich an "strptime" und "mktime" - komme aber nicht weiter...

Könnt mir da jemand vllt bitte helfen?

Danke =)
 
0_2008.12.04_12:35:20

Ich würde es so versuchen (ungetestet):

$dummy1 = explode("_", $zeile);

Dann hast du ein Array mit 3 Elementen (0, das Datum und die Uhrzeit).
Daraus holst du dir dann die Sachen zur Verarbeitung:
$datum = $dummy(1);
$uhrzeit = $dummy(2);

$datum2= explode(".", $datum);
$uhrzeit2 = explode(":", $uhrzeit);

$jahr = $datum2[0];
$monat = $datum2[1];
$tag = $datum2[2];

$stunde = $uhrzeit2[0];
$minute = $uhrzeit2[1];
$sekunde = $uhrzeit2[2];

Jetzt erstellst du ein Timestamp mit den Daten:
$ts1 = mktime ($stunde,$minute,$sekunde,$monat,$tag,$jahr);

Genauso kannst du mit dem anderen DAtum verfahren.

Dann ziehst du einfach nur das eine Datum von dem anderen ab (subrahieren) und dann hast du die Differenz in Sekunden.




Geht sicher aber auch irgendwie schneller.^^
 
Bartspritze am 04.12.2008 16:46 schrieb:
btw genauso wie du hab ichs auch gemacht... hm nochmal schauen.. danke erstmal =)
Dann hattest du doch garkein Problem... :confused: :B
Wolltest du jetzt 5-Nano-Sekunden aus deinem Script rausholen, oder was?!^^

EDIT:
Dabei dachte ich an "strptime" und "mktime" - komme aber nicht weiter...
Das spricht irgendwie dagegen, dass du es genauso gemacht hast. Aber egal. ;)
 
naja vllt nicht 1:1 genauso.
im grunde werden da ja auch die einzelnen Daten zerlegt und mit mktime wieder zusammengefasst.

strptime gibts so aus:
Array
(
[tm_sec] => 19
[tm_min] => 54
[tm_hour] => 15
[tm_mday] => 3
[tm_mon] => 9
[tm_year] => 104
[tm_wday] => 0
[tm_yday] => 276
[unparsed] =>
)

Quelle: http://de3.php.net/manual/de/function.strptime.php
 
Ich versteh jetzt deine Frage einfach nicht mehr. Im Eingangspost hast du nach einer Lösung für ein bestimmtes Problem gefragt. Ich habe dir eine Lösung angeboten. Und dann schreibst du, dass du die Lösung ja selber schon hattest!? Warum schreibst du dann nicht im Eingangspost "ich habe schon folgende Lösung gefunden, würde aber gerne eine Alternative haben", oder Ähnliches? Dann hätte ich mir die Erklärung nämlich sparen können. ;)
Also: Du willst eine alternative Lösung mit weniger Anweisungen, oder wie? Du könntest das Ganze auch in eine Schleife und dann in eine Funktion packen.. :-D
 
Mothman am 04.12.2008 17:41 schrieb:
[...] Also: Du willst eine alternative Lösung mit weniger Anweisungen, oder wie? [...]

Lol^^ jaja, ich bin verrückt >_>
Muss aber auch dazu sagen, dass ich komplett neu in dem Gebiet bin - zumindest was PHP betrifft... das bisschen Perl hilft da auch nicht^^
B2T:
Naja meine Möglichkeit ging iwie nicht - weiß das Eichhörnchen warum... o_O"
Ganz eigentlich war mein Ziel nicht eine Alternative (wie .z.B. deine Antwort, die ja fast das gleiche ist - kannst aber nicht wissen ;) ), sondern einfach nur die eine Zeile - wie in Perl - vorgeschlagen zu bekommen.
Also im Grunde hast du ja recht, das ich doch eine Alternative Lösung mit weniger Zeilen gesucht hab... >_> ach man, es ist fast we - ich schwebe schon in gedanken wenn mein neuer PC kommt^^

Aber deine Lösung ist auch gut^^
Nach ein paar kleinen Verzierungen hier und da läuft es :-D

Wie du das allerdings mit Schleifen realisieren willst ist mir grad ein Rätzel... =/

LG ^-^
 
Ok, ich hab jetzt einfach mal "time" eingegeben und siehe da:

Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.

Quelle: http://de3.php.net/manual/de/function.time.php

das macht alles wesentlich einfacher und übersichtlicher
 
Bartspritze am 05.12.2008 13:16 schrieb:
Ok, ich hab jetzt einfach mal "time" eingegeben und siehe da:

Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.

Quelle: http://de3.php.net/manual/de/function.time.php

das macht alles wesentlich einfacher und übersichtlicher
Häh? :confused:

Edit:
Der "time" Befehl ist mir bekannt.,aber was hat das mit deinem Problem aus der EIngangsfrage zu tun?^^
 
Naja, wenn ich diese Zeit nehme und in mein Log eintrag und später eine aktion ausführe und ich dort die Zeitdifferenz brauche, kann ich die sekunden aus dem log (die Variable $zeile) nehmen und die aktuelle, wenn das script startet. Daraus die Differenz ergibt ... joa die differenz^^ lol xD

das sind 3-4 zeilen^^


Oder gehts doch nicht so leicht wie ich es mir dachte? x_x"
 
Bartspritze am 05.12.2008 14:38 schrieb:
Naja, wenn ich diese Zeit nehme und in mein Log eintrag und später eine aktion ausführe und ich dort die Zeitdifferenz brauche, kann ich die sekunden aus dem log (die Variable $zeile) nehmen und die aktuelle, wenn das script startet. Daraus die Differenz ergibt ... joa die differenz^^ lol xD

das sind 3-4 zeilen^^


Oder gehts doch nicht so leicht wie ich es mir dachte? x_x"
Also wenn du direkt den TIMESTAMP (also den per "time" ermittelten Wert) in das Log schreibst, dann geht es logischerweise so einfacher. :B
Aber ich bin aufgrund deines Eingangspostings davon ausgegangen, dass das hier
0_2008.12.04_12:35:20
die Ausgangslage ist. Ich dachte, DAS ist der Wert, den du weiter verarbeiten willst. Wenn das Format schnurz ist, dann speichert man natürlich - für die besseren Weiterverarbeitungsmöglichkeiten (geiels Wort^^) - Daten im Timestamp-Format. ;)

Also:
Natürlich speicher direkt als Timestamp ab, dann erssparst du dir das ganze extrahieren der Werte mit "explode" etc. =)
 
Zurück