Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP5] Rechnen mit Datum

Empfohlene Antworten

Veröffentlicht

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 :rolleyes:

Vielen Dank für eure Hilfe und Grüße :)

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

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 :rolleyes:

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.

  • Autor

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

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

  • Autor

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

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 ^^

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.