mtn Geschrieben 14. Mai 2007 Geschrieben 14. Mai 2007 Hi, ich habe 2 Fragen zu denen ich nicht so recht eine Lösung finden mag: 1) Angenommen ich habe 2 Datumsangaben: * $start = "2007-05-01 12:00:00"; * $ende = "2007-05-02 13:00:00": Ich möchte diese beiden Daten subtrahieren, also * $ergebnis = $ende - $start; und möchte dann * $ergebnis = "25:00:00"; herausbekommen. Wie muss ich da vorgehen? 2) Ich möchte gern oben erhaltenes Ergebnis * $ergebnis = "25:00:00"; durch z.B. 7 Tage dividieren, also $ergebnis2 = $ergebnis / 7; Wie muss ich hier vorgehen um ein richtiges Ergebnis herauszubekommen? Ich habe mich mit strtotime(), date() und Konsorten beschäftigt, aber irgendwie steig ich grad nicht dahinter Vielen Dank für eure Hilfe und Grüße Zitieren
Nachwuchsinformatiker Geschrieben 14. Mai 2007 Geschrieben 14. Mai 2007 Hi, vielleicht kannst du dein Problem etwas präziser beschreiben. Du willst zwei Daten mit der Formatierung "Y-m-d H:i:s" miteinander vergleichen und die Differenz in der selben Formatierung ausgeben? $datum1 = strtotime("2007-05-01 12:00:00"); $datum2 = strtotime("2007-05-02 13:00:00"); $ergebnis = $datum2-$datum1; echo date("Y-m-d H:i:s", $ergebnis);[/php] Am besten du rechnest dein Datum immer in einen POSIX-Zeitstempel um, arbeitest damit und wandelst es dann wieder per date() in eine von dir gewünsche Datenformatierung um. Vielleicht schaust du dir mal folgendes mal an: PHP: date - Manual PHP: time - Manual PHP: strtotime - Manual ... oder erklärst die Art der Ein- und Ausgabe näher. Grüße Zitieren
geloescht_JesterDay Geschrieben 15. Mai 2007 Geschrieben 15. Mai 2007 Wie muss ich da vorgehen? 2) Ich möchte gern oben erhaltenes Ergebnis * $ergebnis = "25:00:00"; durch z.B. 7 Tage dividieren, also $ergebnis2 = $ergebnis / 7; Wie muss ich hier vorgehen um ein richtiges Ergebnis herauszubekommen? Ich habe mich mit strtotime(), date() und Konsorten beschäftigt, aber irgendwie steig ich grad nicht dahinter 1) Wurde dir ja oben schon beantwortet. Zur Erklärung: ein Computer speichert ein Datum nie so wie du ein Datum siehst oder liest. Wenn du z.B. "15.05.2007" siehst, dann rechnest du das schon entsprechend um und erst dann macht das Datum für dich einen Sinn. Das fällt dir nicht auf, ist aber so Der Computer hat dazu auch ein einfaches mittel um mit dem Datum rechnen zu können. Für den Computer ist ein Datum nur eine Zahl. Je nach System ist es entweder eine Integer- oder eine Float-Zahl. Das bei PHP verwendete POSIX-System (siehe Unixzeit - Wikipedia) zählt einfach die Sekunden seit einem bestimmten Datum. "15.05.2007" im Posixformat ist also nichts anderes als eine große Zahl, die die Anzahl der vergangenen Sekunden vom 1. Januar 1970 00:00 bis zum 15.Mai.2007 00:00 angibt. Wenn du das weißt, kannst du mit 2 Dati einfach Rechnen, wie mit der Anzahl Äpfel daheim. Zitieren
mtn Geschrieben 15. Mai 2007 Autor Geschrieben 15. Mai 2007 Vielen Dank für euere Antworten. Ich präsentiere euch mein Problem mal an einem Beispiel: $start = strtotime("2007-05-09 14:57:13"); $ende = strtotime("2007-05-10 14:29:19"); $dauer_temp = $ende - $start; $dauer = date("H:i:s", $dauer_temp; [/php] Ergebnis bei mir ist "00:32:06" und das kann ja nicht stimmen. Ich komme einfach nicht auf den Trichter wie ich das richtig ausrechnen kann. Vielen Dank und Grüße Zitieren
Nachwuchsinformatiker Geschrieben 15. Mai 2007 Geschrieben 15. Mai 2007 Hi, $dauer = date("H:i:s", $dauer_temp); // da fehlte eine klammer Logisch stimmt das nicht. Du musst dir überlegen was in deinem $dauer_temp steht und was date() daraus macht. Du gibst mit der Zeile Code da oben nur die Differenz der Minuten aus und ignoriert dabei Tag/Monat/Jahr. Was du da machen könntest wäre einfach mal dein $dauer_temp per date() aufzuteilen und dann entsprechend zu verteilen um als Ergebnis eine reine Stunden-Minuten-Sekunden-Formatierung zu bekommen. Als kleines Beispiel hier mal nur mit den Tagen (ungetestet, unsauber, wird so wohl nicht funktionieren, ausschließlich zur darstellung gedacht) : $start = strtotime("2007-05-09 14:57:13"); $ende = strtotime("2007-05-10 14:29:19"); $dauer_temp = $ende - $start; $s1 = date("H", $dauer_temp); $tage = date("d", $dauer_temp); $stunden = $tage*24+$s1; $dauer = date(":i:s", $dauer_temp); $output = $stunden.$dauer; [/php] Grüße Zitieren
mtn Geschrieben 16. Mai 2007 Autor Geschrieben 16. Mai 2007 Ich hab das nach noch mal googlen jetzt so gelöst: <? if(!function_exists(timecalc)){ function timecalc($start_datum, $ende_datum){ $start_jahr = substr($start_datum,0,4); $start_month = substr($start_datum,5,2); $start_day = substr($start_datum,8,2); $start_hour = substr($start_datum,11,2); $start_minute = substr($start_datum,14,2); $start_sekunde = substr($start_datum,17,2); $ende_jahr = substr($ende_datum,0,4); $ende_month = substr($ende_datum,5,2); $ende_day = substr($ende_datum,8,2); $ende_hour = substr($ende_datum,11,2); $ende_minute = substr($ende_datum,14,2); $ende_sekunde = substr($ende_datum,17,2); $start = mktime($start_hour, $start_minute, $start_sekunde, $start_month, $start_day, $start_jahr); $ende = mktime($ende_hour, $ende_minute, $ende_sekunde, $ende_month, $ende_day, $ende_jahr); $time = $ende - $start; $temp = $time; if(date("L") == 1){ $schalt = 366; } else{ $schalt = 365; } // Jahresberechnung $jahre = floor($temp/(60*60*24*$schalt)); $temp = $temp-($jahre*60*60*24*$schalt); // Monate $monate = floor($temp/(60*60*24*30.5)); $temp = $temp-($monate*60*60*24*30.5); $temp = round($temp); // Tage $tage = floor($temp/(60*60*24)); $temp = $temp-($tage*60*60*24); // Stunden $stunden = floor($temp/(60*60)); $temp = $temp-($stunden*60*60); // Minuten $minuten = floor($temp/60); $temp = $temp-($minuten*60); // Sekunden $sekunden=$temp; return array($jahre, $monate, $tage, $stunden, $minuten, $sekunden); } } ?> [/php] Die Hauptquelle für die Lösung findet man unter: yubb.de - Die Webmaster-Community // Berechnung der Dauer zwischen zwei Zeitpunkten Vielen Dank für eure Hilfe Grüße Zitieren
BugBite Geschrieben 17. Mai 2007 Geschrieben 17. Mai 2007 ich hab mir jetz nich alles genau durchgelesen, aber wenn ich eine zeitspanne berechnen will dann, rechne ich doch einfach mit timestamps oder nich? Oo mich hat die lösung jetz grad echt irritiert... $zeitspanne=mktime(...) - mktime(...); oder nich Oo edit: okay sry... $start = mktime($start_hour, $start_minute, $start_sekunde, $start_month, $start_day, $start_jahr); $ende = mktime($ende_hour, $ende_minute, $ende_sekunde, $ende_month, $ende_day, $ende_jahr); war ja in dem codebatzen versteckt ^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.