# Sekunden in Stunde:Minute:Sekunde



## Transporter (15. November 2005)

Hallo,

in meiner DB habe ich den beispielweise den Wert 900.
Diesen Wert will ich aber als Minuten und am besten auch noch
als Stunden und Sekunden anzeigen lassen.

Beispiel:
900 = 00:15:00 oder
1395 = 00:23:15.

Vielen Dank im Vorraus


----------



## Neurodeamon (15. November 2005)

http://www.zend.com/codex.php?id=1363&single=1


----------



## Boof (15. November 2005)

Wie wärs damit ?


```
$stundenende = substr($uhrzeit,0,2);
	$minutenende = substr($uhrzeit,3,2)+$dauer;
	$minutenende2 = $dauer;
	$minuten = substr($uhrzeit,3,2);
	$stunden = substr($uhrzeit,0,2);

if ($minutenende2 < 60 AND $minutenende > 59) {		
		$minuteninstunden = $minutenende/60;
		$stundenberechnung = substr($minuteninstunden,0,1);
		
		$stundenende = $stunden+$stundenberechnung;
		
		$minutenberechnung = $minuten-$dauer;
		$minutenberechnung2 = 60-$minuten;
		$minutenberechnung3 = $dauer-$minutenberechnung2;
		
		$minutenende = $minutenberechnung3;
	}
	
	if ($stundenende > 23) {
		$dauerinstunden = $dauer/60;
		$stundenende = substr($dauerinstunden,0,1);
	}
	
	if ($minutenende > 59) {	
		$minuteninstunden = $minutenende/60;
		$stundenberechnung = substr($minuteninstunden,0,1);
		
		$stundenende = $stunden+$stundenberechnung;
		
		$minutenrest = $stundenberechnung*60;
		$test = $dauer-$minutenrest;
		
		$minutenende = $test+$minuten;
	}
	
	if ($stundenende > 23) {
		$dauerinstunden = $dauer/60;
		$stundenende = substr($dauerinstunden,0,1)-1;
	}
		
	if (strlen($stundenende) == 1) {
		$stundenende = '0'.$stundenende;
	}	
	
	if (strlen($minutenende) == 1) {
		$minutenende = '0'.$minutenende;
	}
```

edit: 
Hab grad bemerkt, dass dieses Skript ohne Sekundenanzeige ist und eigentlich dazu da ist um auf eine Uhrzeit, eine Dauer in Minuten als Uhrzeit zu formatieren und die Dauer dann auf die Uhrzeit dazuzurechnen. Deswegen auch $minutenende und $stundenende. Sorry ich hab die Fragestellung falsch verstanden...


----------



## Sven Mintel (15. November 2005)

Oder hiermit:

```
echo (floor($sec / 21600) . ':' . date('i:s', $sec % 21600));
```


----------



## GH@NDI (15. November 2005)

@Sven
Also zumindest bei mir funktioniert dein Schnippsel nicht 
Bzw. funktioniert schon, ist aber falsch. Kann auch absolut nicht nachvollziehen was die "21600" da zu suchen haben. 

Sofern es nicht erforderlich ist, dass z.B. fehlende Stunden nicht angezeigt werden, würde ich es so lösen:


```
<?PHP 
$sec = 7452;
$h = $sec/3600;
$sec %= 3600;
$m = $sec/60;
$sec %= 60;
$s = $sec % 60;
printf("%02d:%02d:%02d", $h, $m, $s);
?>
```

Adaptiert von Perl und umgeschrieben in PHP


----------



## aKraus (15. November 2005)

```
date('H:i:s', $timestamp);
```


----------



## BSA (15. November 2005)

Was bitte war das für ein faslcher Beitrag @aKraus?

Es geht nich tum die Umwandlung eines Timestamps!


----------



## aKraus (15. November 2005)

Transporter hat gesagt.:
			
		

> Hallo,
> 
> in meiner DB habe ich den beispielweise den Wert 900.
> Diesen Wert will ich aber als Minuten und am besten auch noch
> ...


 
er schreibt, dass er es anzeigen lassen will und NICHT, dass er mit Sekunden, Minuten & Stunden in Variablen arbeiten will! Erst lesen


----------



## nero_85 (15. November 2005)

aber um die Funktion date(); anwenden zu können braucht man auch einen gültigen TIMESTAMP. Und da bringt einem 900 gar nichts


----------



## aKraus (15. November 2005)

Das ist ein gültiger Timestamp.
Ein Unixtimestamp ist nichts anderes als die Sekunden seit dem 1.1.1970. (Bitte korrigiert mich).
900 wäre dementsprechend der 1.1.1970 00:15:00. Da er nur die Uhrzeit angezeigt haben will, würde die date() Funktion seinen Zweck voll und ganz verfüllen.


----------



## BSA (15. November 2005)

Ich denke das er das anders haben will. Er zählt sicherlich die vergange Zeit in Sekunden und möchte diese Vergangene Zeit dann in Stunden Minuten etc. umwandeln. Ich denk nicht das er ein Datum haben möchte, oder?


----------



## aKraus (15. November 2005)

Geschrieben hat er, dass er den Wert in der Datenbank hat und ihn dann dementsprechend anzeigen lassen möchte.

 Zumindest interpretier ich das so...


----------



## JohannesR (15. November 2005)

aKraus: Es geht aber nicht um einen Timestamp, sondern um die Differenz zwischen zwei unterschiedlichen. Und wenn du die Differenz zwischen jetzt und gleich wissen willst, hilft dir der 1. Januar 1970 um 3.15 Uhr auch nicht besonders viel - er will eben nicht die Uhrzeit anzeigen.

Hier ist dein Schild.


----------



## aKraus (15. November 2005)

hm, bin ich blind oder so?
 Er hat einen Post geschrieben und in diesem kommt nirgends was mit differenz vor! Evtl. sitzt ich zu viel vorm PC. Ich sollt mal Urlaub machen...


----------



## FipsTheThief (15. November 2005)

was aKraus sagt ist schon richtig so , er kann sich doch einfach die Zeit ausgeben lassen die er in einen Timestamp hat zum beispiel 900.

Dann ist das halt 00:15:00 am ersten Januar 1970. Aber das Datum juckt hier nicht somit wäre es die korrekte Zeit laut seiner Fragestellung 

Das was er machen möchte ist denk ich mal die Zeit herrunter zählen dann , aber selbst das wäre ja kein Problem. Man nimmt den aktuellen Timestamp + 900 - aktuellen Timestamp. Somit würde man auf genau das gleiche kommen eigentlich fällt mir ein.


----------



## aKraus (15. November 2005)

endlich mal einer, der mir zustimmt. Ich hab schon an mir selbst gezweifelt...


----------



## FipsTheThief (15. November 2005)

aKraus hat gesagt.:
			
		

> endlich mal einer, der mir zustimmt. Ich hab schon an mir selbst gezweifelt...



Ja also wegen den 100 Euro das klären wir später gelle 

Die Frage die ich mir nur Stelle was ist wenn es über 23:59:59 hinausgeht dann haut es nicht mehr hin *G*


----------



## Neurodeamon (15. November 2005)

Kaum ist man für einige Stunden weg, schon spammt man den Beitrag.
Schön das Ihr ausdiskutiert was Transporter nun haben möchte - ich verwende mal aus Höflichkeit nicht den Begriff 'zanken' - warum nicht einfach warten bis er sich selbst dazu äußert?

Kinners, kinners...
*kopfschüttel*


----------



## Sven Mintel (16. November 2005)

GH@NDI hat gesagt.:
			
		

> @Sven
> Also zumindest bei mir funktioniert dein Schnippsel nicht



Stimmt, hab mich verstan...eine Stunde hat natürlich nur 3600 sec und nicht 21600.

Sollte daher besser lauten:

```
echo (floor($sec/3600).':'.date('i:s',$sec%3600));
```

Bevor auch mir einer sagt, dass da date() keinen Sinn macht.... das macht es schon 

date() wird ja da nur für das verwendet, was nach dem Abzug der vollen Stunden übrig bleibt.... somit kann man das da gut missbrauchen....


----------



## heikomi (16. November 2005)

Vielleicht hilft dir das hier


```
$var1 = "00:15:00";
$var1 = "00:16:02";

$zeit1_H = substr($var1, 0, 2) * 3600;      
$zeit1_M = substr($var1, 3, 2) * 60;        
$zeit1_S = substr($var1, 6, 2);             

$zeit2_H = substr($var2, 0, 2) * 3600;
$zeit2_M = substr($var2, 3, 2) * 60;
$zeit2_S = substr($var2, 6, 2);

$zeit1 = $zeit1_H + $zeit1_M + $zeit1_S;    
$zeit2 = $zeit2_H + $zeit2_M + $zeit2_S;

$H = 0;$M = 0; $S = 0;

if($zeit1 > $zeit2) {$S = (86400 - $zeit1) + $zeit2;}
if($zeit1 < $zeit2) {$S = $zeit2 - $zeit1;}

while($S > 3599){$H = $H + 1; $S = $S - 3600;}
while($S > 59)  {$M = $M + 1; $S = $S - 60;}

if($H < 10) {$H='0'.$H;}
if($M < 10) {$M='0'.$M;}
if($S < 10) {$S='0'.$S;}

echo "Start: ".$var1."<br>";
echo "Ende: ".$var2."<br>";
echo "<B>Dauer: ".$H.":".$M.":".$S."<br>";
```


----------



## BSA (16. November 2005)

Ich bin der Meinung das wird das Thema erstmal ruhen lassen sollte (wie Neurodeamon schon sagte) und einfach abwarten was Transporter dazu sagt. Er hat sich ja bis jetzt nach der 20 Antwort immernoch nicht gemeldet. Vielleicht hat er ja auch schon ein Lösung und hat es schlicht wg vergessen das Thema hier als erledigt abzuhacken!

Gruß BSA


----------



## Neurodeamon (16. November 2005)

BSA hat gesagt.:
			
		

> Er hat sich ja bis jetzt nach der 20 Antwort immernoch nicht gemeldet.


Also ICH hätte furchtbare Angst .. nach 20 Antworten in kürzester Zeit. Da soll jemand sagen wir würden uns nicht darum prügeln helfen zu können


----------



## Sven Mintel (16. November 2005)

Neurodeamon hat gesagt.:
			
		

> .. nach 20 Antworten in kürzester Zeit.



Naja...schliesslich gehts hier auch um ein Thema höchster Priorität... gewissermassen um einen Stützpfeiler der abendländischen Kultur... sowas muss schon nach allen Regeln der Kunst ausdiskutiert werden


----------

