php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.09.2006, 12:45  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 311
kampfnickel
Standard Zeitberechnungen

tag zusammen,

ich habe nun schon mehrere tage daran gerätselt, wie ich eine Differenz von 2 zeitangaben erhalte.
Beispiel:

ich gebe 8:00 Uhr und 12:00 Uhr ein.
Die Differenz beträgt ja nun 4 stunden.

ich hab erst versucht gehabt die zeit in EIN textfeld einzugeben und dann damit gerechnet. nur das scheint leider nicht zu klappen. Das Eingabeformat war HH:ii

PHP-Code:
$zeit_start $_POST['edt_start']; // 8:00
$zeit_ende $_POST['edt_ende']; // 12:00

$ges $zeit_ende $zeit_start
anschließend wollte ich das ganze mit den timestamps berechnen.
dazu die 4 textfelder.

PHP-Code:
$start_std $_POST['edt_start1']; // 8
$start_min $_POST['edt_start2']; // 00
$ende_std $_POST['edt_ende1']; // 12
$ende_min $_POST['edt_ende2']; // 00


$start mktime(".$start_std.",".start_min.",0,0,0,0);
$ende mktime(".$ende_std.",".$ende_min.",0,0,0,0); 
und hier bekomme ich bei beiden das Ergebnis -1 zurück!


weiß einer, warum hier -1 rauskommt oder ob es eine andere lösung dafür gibt?? wäre super, wenn mir jemand helfen könnte. ich hoffe, ich habe es eindeutig geschildert.

MfG
kampfnickel ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.09.2006, 13:00  
Erfahrener Benutzer
 
Registriert seit: 01.02.2004
Beiträge: 550
cytrobic
Standard

PHP-Code:
if(!empty($_POST['edt_start'])){
  
$zei_start split(":"$_POST['edt_start'];
  echo 
mktime($zei_start[0], $zei_start[1], 0000);

kommt da auch -1 raus ?

ausserdem brauchste bei mktime($var, $var); die " nicht ...
__________________
keine
cytrobic ist offline  
Alt 11.09.2006, 13:14  
Gast
 
Beiträge: n/a
Standard

-1 kommt raus wenn mktime kein timestamp aus den Parameter erstellen kann.
mktime erwartet int als Parameter und nicht string

".$start_std."

ist ein string den wird auch der automatische Typkonverter nicht in int übersetzen können
 
Alt 11.09.2006, 13:17  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 311
kampfnickel
Standard

ja, da bekomme ich auch -1 raus als wert.

edit:
ich habe die " entfernt, nur kommt immernoch das selbe bei raus
__________________
Rollt nen Ball und die Ecke und ist weg!
kampfnickel ist offline  
Alt 11.09.2006, 13:31  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

Ihr seid helden!!

Was soll da denn auch anderes raus kommen.

Ihr wollt den Zeitstempel vom 0.0.0 um 8:00

das kann doch nix geben.

Versucht es mal mit mktime($stunde,$Minute)
CC84 ist offline  
Alt 11.09.2006, 13:33  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 311
kampfnickel
Standard

hm, okay.. kaum macht man's richtig, schon gehts
ich dachte, dass die parmeter nicht optional sind, daher hab ich sie angegeben!
__________________
Rollt nen Ball und die Ecke und ist weg!
kampfnickel ist offline  
Alt 11.09.2006, 13:52  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 311
kampfnickel
Standard

argh...

jetzt steh ich vor dem problem, wie ich eine ordentliche zeitangabe aus dem zeitstempel rausbekomme...

der stempel, den ich jetzt bekomme von der differenz lautet: 14400

wenn ich das ganze nun mit date() ausgeben lasse, erhalte ich den Wert: 5:00
ist ja schon fast richtig

PHP-Code:
 echo date("H:i",$differenz); 
edit:
liegt das daran, dass der timestamp um 1 uhr anfängt? wenn ja, kann man ja generell sagen, dass er 3600 abziehen soll vom stempel, da dies einer stunde entspricht
kampfnickel ist offline  
Alt 11.09.2006, 14:19  
Erfahrener Benutzer
 
Registriert seit: 03.01.2006
Beiträge: 253
CC84
Standard

Das Problem was du nun hast, ist dass er dir einen konkreten Zeitstempel wert zurück gibt. Das ist dann der 1.1.1970 und 5 Uhr.

Du willst aber keinen Zeitpunkt sondern die Differenz. Du musst also selber ran:

14400 / 3600 = 5

Wenn du nun auch noch die Minuten haben willst musste das sukkesive machen:

$stunden = (int)$differenz/3600;
$minuten = (int)($differenz - 3600*$stunden)/60;

und dann eben echo "$stunden:$minuten";
CC84 ist offline  
Alt 11.09.2006, 14:32  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 311
kampfnickel
Standard

gibt es evtl. sogar eine andere lösung um so eine differenz fest zu stellen?
__________________
Rollt nen Ball und die Ecke und ist weg!
kampfnickel ist offline  
Alt 11.09.2006, 17:35  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

Wenn es nur um 2 Uhrzeiten geht und die 2. Zeit immer am gleichen Tag ist, warum dann so kompliziert?! Es handelt sich um eine ganz simple Rechnung.

Deine Eingabe:
$stunden1,$minuten1,$stunden2,$minuten2

Die Rechnung (Stunden jeweils in Minuten umrechnen und voneinander abziehen):
$differenz = (($stunden2*60)+$minuten2)-(($stunden1*60)+$minuten1);


Danach nochmal in Stunden/Minuten spalten so ähnlich wie bei CC84:
$stunden = (int)$differenz/60;
$minuten = (int)$differenz%60;
webbi ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verwirrungen um Zeitberechnungen Isver Datenbanken 1 04.10.2007 13:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zeitberechnungen, zeitberechnunge mit lösungen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.