Brauche dringend Hilfe bei Datumsberechnung

E

encom

Hallo, ich habe in ein Startdatum und ein Enddatum und möchte nun die Differenz in Tagen, Stunden und Minuten errechnen.

Startdatum in der Datenbank: 12.11.2004 18:00
Enddatum in der Datenbank: 04.12.2004 16:30

PHP:
<?php 
  $start      = explode(" ",$r_artdetail->auktionsbegin); #Datum und Zeit trennen
  $startdatum = explode(".",$start[0]); #Datum trennen
  $startzeit  = explode(":",$start[1]); #Zeit trennen
  
  $end        = explode(" ",$r_artdetail->auktionsende); #Datum und Zeit trennen
  $enddatum   = explode(".",$end[0]); #Datum trennen
  $endzeit    = explode(":",$end[1]); #Zeit trennen

  $start_stamp  = mktime ($startzeit[0],$startzeit[1],0,$startdatum[1],$startdatum[0],$startdatum[2]);
  $end_stamp    = mktime ($endzeit[0],$endzeit[1],0,$enddatum[1],$enddatum[0],$enddatum[2]);
  
  
  $left=$end_stamp-$start_stamp;
  
  $tage    = abs(($start_stamp-$end_stamp)/60/60/24); 
  $stunden = abs(($start_stamp-$end_stamp)/60/60);
  
  echo("<br>Die Auktion läuft noch <b>".$tage."</b> Tage<br>");
  echo("<br>Die Auktion läuft noch <b>".$stunden."</b> Stunden");  
?>

So wie ich es habe funktioniert es einfach nicht.
Ich hoffe es hat einer etwas Ahnung davon.

Übrigens, ich darf das Format in der Datenbank nicht ändern

Danke
 
habe geschaut, aber sagt diese Zeile nicht alles?

strtotime -- Wandelt ein beliebiges Datum (englisches Format) in einen UNIX-Zeitstempel (Timestamp) um.

Mein Datum liegt im deutschen Format vor. Kann ich strtotime also trotzdem nutzen?
 
Ok, hast recht.

Dann würde ich das aber trotzdem so machen:
PHP:
list($startdatum,$startzeit) 
    = explode(" ",$$r_artdetail->auktionsbegin);
list( $sd_tag, $sd_monat, $sd_jahr ) = explode(".",$startdatum);
list( $st_stunde, $st_minute ) explode(":",$startzeit);

...
 
Ok, hab es jetzt so gemacht

PHP:
<?php
#Verbleibende Zeit der Auktion ermitteln
list($startdatum,$startzeit) = explode(" ",$r_artdetail->auktionsende); 
list( $sd_tag, $sd_monat, $sd_jahr ) = explode(".",$startdatum); 
list( $st_stunde, $st_minute ) = explode(":",$startzeit); 

$auktionsende = mktime($st_stunde, $st_minute, 0, $sd_monat, $sd_tag, $sd_jahr); 
$verbleibend  = $auktionsende - time();


$tage = floor($verbleibend / 86400); 
$verbleibend = $verbleibend - $tage * 86400; 

$std  = floor($verbleibend / 3600); 
$verbleibend = $verbleibend - $std * 3600; 

$min  = floor($verbleibend / 60); 
$verbleibend = $verbleibend - $min * 60; 

$sec  = $verbleibend; 

if($tage > 0) $tage = $tage.' T, '; else $tage = '';
print $tage.$std.' Std, '.$min.' Min'; 
?>
 
Zuletzt bearbeitet von einem Moderator:
Warum nicht einfach das Start- und Enddatum als Timestamp in der DB speichern ? Dann sparst du dir viel Arbeit ...
 
Ja das habe ich mir auch schon gedacht.
Mal sehen wie es weitergeht, mein oben geposteter Code läuft irgendwie nicht richtig.
Die Zeit ist schon ein paar Stunden abgelaufen da zeigt er auf einmal 35 Stunden an
 
Zurück