Formular füllen - Rechnen mit Zeitwerten

Status
Für weitere Antworten geschlossen.

AS-123

Well-known member
Formular füllen - Rechnen mit Zeitwerten

Hallo,
ich komme einfach nicht weiter an einer Stelle. Also ich habe zwei Zeitwerte.
Track-Anfang 2010-05-01 11:04:30 = $tanfang
Track-Ende 2010-05-03 11:05:36 = $tende
So nun möchte ich die Differenz ausgeben, also Fahrzeit ist gleich Track-Ende ($tende) minus Track-Anfang ($tanfang). Das ganze soll dann ausgegeben werden Fahrzeit beträgt 2 Tage 01 Minuten und 06 Sekunden.
So im Code lese ich die Zeitwerte aus und formatiere sie das sie Datenbank konform sind, und nun müsste man eigentlich rechnen können damit, aber hier scheitere ich etwas, habe schon was mit Timestamp probiert aber bin irgendwie nicht zurecht gekommen mit Umwandlung, Berechnung und Ausgabe.
Hat jemand einen Lösungsansatz für mich.
Gruß AS-123
PHP:
<?php
function gettime($quelle) {//Funktion zum Auslesen von time aus der gpx-Datei
	$quelle = substr($quelle, strpos($quelle, "<time>")+ strlen("<time>"));
	return substr($quelle, 0, strpos($quelle, "</time>"));
}//end function

function zertime($quelle) {//Funktion zum Umwandeln der Zeit
$quelle = str_replace(array("T","Z"),array(" ",""), $quelle);
return $quelle;
}//end function

$track = 'test.gpx';
if (file_exists($track)) {//prüfen, ob angegebene Datei vorhanden ist
echo 'Datei '.$track.' ist da';

$fp = fopen( $track, "r"); // gpx-Datei öffnen
$t=0;
$m=0;
while (! feof( $fp )) {
	$zeile = fgets($fp, 4096);	
						if (strpos($zeile,"<time>") !== false) {
	                 	$time[$t] = gettime($zeile);
	                 	$t++; //das ist die Zahl wieviel mal <time> vorkommt
	                 	}//end if
} //end while
fclose($fp); //gpx-Datei schließen

$tspeicher = zertime($time[$t-$t]); //Speicherzeit der gpx ermitteln
$tanfang = zertime($time[($t-$t)+1]); //Startzeit des Tracks
$tende = zertime($time[$t-1]); //Endzeit des Tracks
}//Ende Prüfung => sonst
else {echo 'Datei ist nicht da.';}//Ende sonst

?>
 
Hi,
einfach PHP: strtotime - Manual verwenden und mit Timestamp rechnen ;)

Bsp
Code:
echo 'Ergebnis: '.round((strtotime($groessereZeit)-strtotime($kleinereZeit))/86400,3).' Tage';

Gruß
Broken Sword
 
Neues Prob mit Formular

HI,
Danke hab ein wenig nachgelesen und noch ein wenig gesucht und dann das hier (gefunden) gebastelt.
PHP:
$diff = ((strtotime($tende))-(strtotime($tanfang)));
$trackdiff = array("h"=>0, "m"=>0, "s"=>0);
while ($diff>=3600) {// 1 Stunde = 3600 Sekunden
  $diff -= 3600;
  $trackdiff['h']++;
}
while ($diff>=60) {// 1 Minute = 60 Sekunden
  $diff -= 60;
  $trackdiff['m']++;
}
$trackdiff['s'] = $diff;

print "Die Fahrzeit betrug ".$trackdiff['h']." Stunden, ".$trackdiff['m']." Minuten und ".$trackdiff['s']." Sekunden!";
So nun muss ich nur noch eine Durchschnittsgeschwindigkeit errechnen und dann hab ich glaub alles.
Gelöst - $laenge sind die Kilometer im Format 12.036
PHP:
//Berechnung Fahrzeit für Durchschnitt
$durchschnitt = str_replace(".",",",round($laenge/(((strtotime($tende))-(strtotime($tanfang)))/3600),2));
Datenbank
Na ich möchte gleich noch eine Frage anschließen um nicht einen neuen Trade zu starten.
Also ich habe eine msql Tabelle wo es eine Spalte Jahr gibt und dort stehen verschiedene Jahreszahlen im Format YEAR(4) also 2008 usw.
Nun möchte ich gern ein Formular damit füllen, also im Formular sollen alle Jahre stehen die es in der Tabelle gibt sortiert mit dem aktuellen Jahr abwärts.
Im Moment setze ich die Daten in das Formular immer noch manuell ein, aber das ist :würg:
HTML:
<form action="" method="get" name="mtb_jahr">
<select name="jahr" size="1" id="jahr" onchange="this.form.submit()">
<option value="">Saison Jahr wählen</option>
<option value="2010">Saison 2010</option>
<option value="2009">Saison 2009</option>
</select>
</form>
Ich vermute mal das geht mit einer Schleife, aber ich brauche kleinen Denkanstoß wie so oft :confused:
Gruß AS-123 und noch schöne Pfingsten
(bei uns schüttet es schon wieder :mad:)
 
Hallo,

Mit den Jahren, wenn ich dein Problem jetzt richtig verstanden habe, baust du die Jahre in ein Array und löst das array dann mit einer foreach schleife auf.

PHP:
<?php
//Jahre in array basteln
$date = array ();
$aktuell = date ( 'Y' );
for($i = 1980; $i <= $aktuell; $i ++) {
	$a = $i - 1980;
	$date [] = $i;
}

//pulldownmenu mit date array füllen

$pdmenu = '<select name = "jahr" size="1">';
$pdmenu .= '<option value="">Jahr wählen</option>';
foreach ( $date as $option ) {
	$pdmenu .= '<option value="' . $option . '">' . $option . '</option>';
}

$pdmenu .= '</select>';

echo $pdmenu;

?>

Ich hoffe, dass du damit was anfangen kannst. :)
Jetzt muss ich aber raus hier ist wunderbares Wetter!!!!

Greetz
DJPM1
 
Vergessen - Pulldownmenu die zweite

Hallo,
fast hätte ich diesen Beitrag vergessen. Na ja war im Moment etwas Stressig bei mir.
@DJPM1
dieser Ansatz ist schon mal nicht schlecht aber das Array dibt mir ja alle Jahre aus von 1980 bis jetzt.

Was ich aber Suche ist ein Pulldownmenu was mir die Jahreszahlen einer Datenbank ausgibt.
Also ich habe eine Datenbanktabelle Tab1 mit Spalte id und Spalte Jahr.
In der Tabelle steht jetzt zB.
id / jahr
1 / 2010
2 / 2010
3 / 2008
4 / 2007
5 / 2005

Nun soll das Pulldownmenu halt nur diese Jahre auflisten also 2010-2008-2007-2005

Gruß AS-123
 
Na, das ist doch eine simple SQL-Abfrage
Code:
SELECT `jahr` FROM `Tabelle` ORDER BY `jahr` DESC
Dann halt nur noch die Mitte von DJPM1s Script nehmen, foreach mit der "fetch-while-Schleife" ausgetauscht und es sollte stimmen.

Gruß
Broken Sword
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten