Zum Inhalt springen

[PHP5] Rechnen mit Datum


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...