Avatar billede krydset Nybegynder
06. maj 2004 - 00:41 Der er 10 kommentarer og
1 løsning

en time for meget

Hejsa er ved at lege med nogle tider (unix timestamp) og har lavet det her lille script som skulle fortælle hvor lang tid man har været online men det vider en time for meget, nogen der ved hvorfor

<?php

$tid_nu = time();
$login_tid = "1083795775";

$new_time = time() - $login_tid;

$tid_nu = date("g:i:s", $tid_nu);
$login_tid = date("g:i:s" ,  $login_tid);




$new_time = date("g:i:s", $new_time);

echo "Du er logget ind kl: $login_tid og kl er nu: $tid_nu og har været på i $new_time";
?>

Scriptet kan ses her og i kan selv præve at regne efter.

www.pc-dk.dk/time2.php

Hilsen krydset
Avatar billede roenving Novice
06. maj 2004 - 00:50 #1
Den klassiske forklaring på noget sådant er, at sommertd på en eller anden måde har en indflydelse på kun noget af det, så prøve at udkommentere dine konverteringer og se, om ikke starttiden er de der 3,6 mio. millisekunder galt på en eller anden måde !-)
Avatar billede sukos Juniormester
06. maj 2004 - 01:27 #2
Det er da sek. og ikke milisek.?

anyway, ville nok selv bruge javascript til at "tælle op" ud fra et givent antal sek. og på den måde vise online-tid
Avatar billede roenving Novice
06. maj 2004 - 01:40 #3
>>sukos

Du har ret, og jeg tror at forklaringen kom frem i min test:

Du bruger date-formattering, og den ved jo godt, at vi er en time foran Universal time (Greenwich Mean Time), så den tillægger den time ved konverteringen, og angiver altså hvad klokken var i Danmark d. 1. januar 1970, da Universal time var nået til f.eks. 21 minutter og 45 sekunder over midnat !-)
Avatar billede detox Nybegynder
06. maj 2004 - 03:08 #4
Du kan måske bruge dette:

<?php
$login_tid = "1083795775";
$nt = time() - $login_tid;
$tid_nu = date("G:i:s");
$login_tid = date("G:i:s" ,  $login_tid);
echo "Du er logget ind kl: $login_tid og kl er nu: $tid_nu og har været på i: ";
printf("%d:%02d:%02d", floor($nt/3600), ($nt/60)%60, $nt%60);
?>
Avatar billede huutt Nybegynder
06. maj 2004 - 09:54 #5
det kan evt også være tiden på din server der er galt på.
Avatar billede detox Nybegynder
06. maj 2004 - 10:03 #6
Nej, roenving har helt ret mht. at den udregner tiden den 1/1-1970 (og der er det jo ikke sommertid). Derfor vil jeg anbefale at udregne tidsforskellen, som i mit eksempel.
Avatar billede krydset Nybegynder
06. maj 2004 - 10:38 #7
tiden på min server er identisk med tiden på ws, og hvordan skulle sommertid kunne spille ind når server og ws tid er identisk og det er servern timestamp er taget fra
Avatar billede krydset Nybegynder
06. maj 2004 - 10:40 #8
okay detox, det virker dit men du må foklare mig denne her linie hvad der sker i den
printf("%d:%02d:%02d", floor($nt/3600), ($nt/60)%60, $nt%60);
Avatar billede detox Nybegynder
06. maj 2004 - 21:07 #9
Ok.
Printf() formaterer i dette format: t:mm:ss
floor($nt/3600) finder antal hele timer ved at dele med 3600 (sek/time) og runde ned til nærmeste hele tal.
($nt/60)%60 finder antal minutter; deler med 60 (sek/min); %60 modular division (dvs resten efter division med 60).
$nt%60 finder sekunder; (rest efter division med 60).
Avatar billede roenving Novice
07. maj 2004 - 00:54 #10
Og lige for at uddybe problemet lidt:

Når du bruger time() er udgangspunktet antallet af sekunder siden d. 1/1-1970 kl. 0:00:00 Greenwich Mean Time, også kaldet UTC ...

Dvs. at din konvertering af 1083795775 korrekt bliver 6. maj 2004 00:22:55 UTC+0200

Ligeledes bliver en ny time() et korrekt tidspunkt 1083796992 lig med 00:43:12 samme dag ...

Men forskellen 1217 sekunder giver datoen: 1/1-1970 kl. 0:20:17 GMT, hvilket i dansk tid er plus en time, så hvis du kun formatterer tidspunktet får du 1:20:17 (underforstået d. 1/1-1970 !-)

-- så det er altså en fejl at formattere tidsforskelle ved hjælp af date() og time(), det skal som detox viser gøres ved at bruge en 'langsom' formattering !o]
Avatar billede krydset Nybegynder
08. maj 2004 - 12:41 #11
ok takker detox og roenvig det var udemærket forklaret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester