php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
zeitberechnung klappt nicht


 
Metallica
07-08-2003, 11:06 
 
hi leuts,

im folgenden code will ich die zeit berechnen. statt der differenz bekomme ich allerdings immer "-1" als wert zurück. wo hinkt's da??

Code:
$cur_time = time();
$sql_lasttime = mysql_query("SELECT LASTTIME FROM tab WHERE CURRENT = 'yes'");
$fetch_lasttime = mysql_fetch_array($sql_lasttime);
$check_time = strtotime($fetch_lasttime[0]);
$zeit_diff = ($cur_time) - ($check_time); //Berechnung ob mehr als 24 Std. vergangen sind

If ($zeit_diff > 0) { //mehr als 24 Std. sind vergangen
... ...

:dontknow:

 
schmalle
07-08-2003, 11:27 
 
sieht so aus, als läge da ein problem mit dem datum aus der sql-db vor. lass dir mal $fetch_lasttime[0] und $check_time per echo ausgeben.

 
Metallica
07-08-2003, 11:39 
 
$checktime = -1
$fetch_lasttime=1060180559
$zeit_diff=1060245183

ich trage immer mit time() in die DB-Tab. ein weil strtotime sich ja genau dieses format erwartet. in der ref. steht, dass es bei einem falschen wert (vom format her) immer -1 zurück gibt.

:confused:

 
mrhappiness
07-08-2003, 11:45 
 
sicher?

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

Diese Funktion erwartet einen String mit einem Datum im englischen Format und versucht, diesen in einen UNIX-Timestamp umzusetzen. Versucht wird dies relativ zu dem Timestamp, den Sie mit now angeben. Fehlt diese Angabe, wird die aktuelle Zeit angenommen. Schlägt die Umwandlung fehl, wird -1 zurückgegeben.

wenn du einen time()-wert einträgst, warumwillst du ihn dann och in was anderes umwandelnum ihnm it nem time()-wert zu vergleichen? :confused:

 
Metallica
07-08-2003, 12:02 
 
du hast recht, das frag ich mich auch gerade.

nachdem ich ja in das tab-feld nur time() eintrage brauche ich eigentlich strtotime nicht.

trotzdem bleibt die frage offen wie ich das ergebnis interpretieren soll sprich wie ich jetzt wirklich weiß ob 24 std. vergangen sind?

Code:
$cur_time = time();
$sql_lasttime = mysql_query("SELECT LASTTIME FROM tab WHERE CURRENT = 'yes'");
$fetch_lasttime = mysql_fetch_array($sql_lasttime);
$lasttime = $fetch_lasttime["LASTTIME"];
$zeit_diff = ($cur_time) - ($check_time); //Berechnung ob mehr als 24 Std. vergangen sind

// ???
If ($zeit_diff > 0) { //mehr als 24 Std. sind vergangen???

Die Echo-Ausgaben:
$cur_time=1060245182
$fetch_lasttime=1060180559
$zeit_diff=1060245183

:confused:

 
schmalle
07-08-2003, 12:03 
 
nun, ein timestamp besteht aus sekunden, somit hat ein tag 60*60*24 sekunden ... klingelts? .D

 
mrhappiness
07-08-2003, 12:06 
 
$zeit_diff = $cur_time - $check_time = 1060245182 - 1060180559 = 64623 und nicht 1060245183!

was der unix-timestamp angibt weißt du? (sekunden seit 1.1.1970)

und wieviel sekunden 24 stunden ergeben kannst du ausrechnen*grml*

immer kommt einem die chefin dazwischen

 
Metallica
07-08-2003, 12:13 
 
ok, wenn ich jetzt 60*60*24 rechne dann bekomme ich als Ergebnis 86400 => das sind also die Sekunden eines ganzen tages (24std.)

$zeit_diff muss ich also mit 86400 vergleichen. so:
If ($zeit_diff > 86400) {
bla bla
}

aber das geht ja nicht weil $zeit_diff ja noch aus sekunden besteht. wenn ich also $zeit_diff/60/60/24 dann bekomme ich irgend'nen kryptischen wert.

jetzt weiß ich nicht mehr weiter, sorry
:dontknow:

 
mrhappiness
07-08-2003, 12:15 
 
isses arg heiß bei dir? ;)

$zeit_diff enthält die differenz in sekunden und 86400 sekunden ergeben 24 stunden, was willst du da jetzt noch rumrechnen?

 
Metallica
07-08-2003, 12:20 
 
wie folgt muss es funtzen:

$cur_time = time();
$sql_lasttime = mysql_query("SELECT LASTTIME FROM tab WHERE CURRENT = 'yes'");
$fetch_lasttime = mysql_fetch_array($sql_lasttime);
$lasttime = $fetch_lasttime["LASTTIME"];
$zeit_diff = ($cur_time) - ($lasttime);

If ($zeit_diff > 86400) { //mehr als 24 Std. sind vergangen (60*60*24=86400->1Tag)
bla bla...

 
mrhappiness
07-08-2003, 12:28 
 
das is genau das, von dem du vorhin sagtes es ginge nicht, hast du's jetzt probiert oder was?

 
Metallica
07-08-2003, 12:35 
 
klar ging's vorher nicht weil strtotime -1 geliefert hat und die berechnung mit falschen werten durchgeführt wurde.

jetzt funkt's.
echo:
lasttime=1060180559
zeit_diff=68259

das vergleiche ich mit 86400 und weiß ob ein tag vergangen ist od. nicht.

;)
wiedermal danke, Leute!!!!
was wärt ihr ohne meine fragerei?:D

 
mrhappiness
07-08-2003, 12:39 
 
Original geschrieben von Metallica
was wärt ihr ohne meine fragerei?:D arbeitslos, aber glücklich? *fg*

 
Metallica
07-08-2003, 13:04 
 
:D


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:32 Uhr.