Avatar billede Slettet bruger
28. juli 2010 - 21:51 Der er 12 kommentarer og
1 løsning

Indstilling af tidszone: Håndtering af sommertid

Hej Eksperter,

HVORDAN?
At lade brugeren vælge en by på en liste til håndtering af tidszoner og lægge tidsforskellen fra UTC til er jo enkelt nok - men jeg kan simpelthen ikke greje, hvordan jeg (på fornuftig vis) kan håndtere sommertid, når forskellige lande har forskellige regler og forskydelser. Nogen forslag?
Avatar billede claes57 Ekspert
28. juli 2010 - 22:02 #1
brugers egen pc ved jo, hvor den er, og hvad tiden er lokalt - lav et skjult felt på formularen, hvor et javascript skriver klokken.
Det aflæser du, og sagen er 'bøf'.
Er dato/klokke mere end 24 timer skævt i forhold til din server, så drop det, og brug din egen tid - brugers maskine er ikke sat korrekt op - promt evt efter tid.
Avatar billede arne_v Ekspert
28. juli 2010 - 22:03 #2
Hvis du saetter tidszone/sted, saa burde sommertid haandteres korrekt helt automatisk.
Avatar billede richardjensen Seniormester
28. juli 2010 - 22:04 #3
Så vidt jeg ved skal man kun indstille computer-uret efter den tidszone,man befinder sig i, og computeren klarer selv 'det med
havemøblerne'! Sådan er det i hvert fald på min comp, - prøv at gå ind i kontrolpanel/dato og klokkeslæt, så vil du nok kunne se om det ikke hos dig er som her.
Tidszone: Rom, sommertid
Avatar billede Slettet bruger
28. juli 2010 - 22:36 #4
Problemet er, at jeg ikke kan afhænge af JavaScript; jeg har behov for at kunne svare brugeren efter første request - så hvis klienten selv skulle opgive tiden, skulle det ske i selve HTTP-requestet.

@arne
Ja, hvis jeg bruger PHP's indbyggede system - men så skal jeg først have en komplet liste over dettes tidszoner og deres forskydelse fra UTC (det sidste for brugervenlighedens skyld). Står det et sted - eller endnu bedre: Er der en funktion, der returnerer det?

Med forbehold for idioti da min hjerne ikke kører helt optimalt lige nu.
Avatar billede arne_v Ekspert
29. juli 2010 - 04:46 #5
Til inspiration:

<?php
function TZoffset($tz, $tim) {
    date_default_timezone_set('UTC');
    $h1 = date('H', $tim);
    $d1 = date('d', $tim);
    date_default_timezone_set($tz);
    $h2 = date('H', $tim);
    $d2 = date('d', $tim);
    return $h2 - $h1 + ($d2 - $d1)*24;
}
echo TZoffset('Europe/Copenhagen', time()) . "\r\n";
echo TZoffset('Europe/Copenhagen', time() - 180*24*60*60) . "\r\n";
?>
Avatar billede arne_v Ekspert
29. juli 2010 - 04:47 #6
I nyere PHP kan du liste alle TZ med:

foreach(DateTimeZone::listIdentifiers() as $tz) {

}
Avatar billede arne_v Ekspert
29. juli 2010 - 05:08 #7
#5 har problemer ved maanedsskift.
Avatar billede Slettet bruger
29. juli 2010 - 10:45 #8
<?php
foreach (DateTimeZone::listIdentifiers() as $tz) {
    date_default_timezone_set($tz);
    echo "$tz :: ".date("H:i", time())."<br>";
}
?>

Ingen problemer.


<?php
foreach (DateTimeZone::listIdentifiers() as $tz) {
    $current = new DateTime($tz);
    echo "$tz :: ".date("H:i", $current->getTimestamp())."<br>";
}
?>

Africa/Abidjan :: 08:44
Africa/Accra :: 08:44
Africa/Addis_Ababa :: 08:44
Africa/Algiers :: 08:44
Africa/Asmara :: 08:44
Africa/Bamako :: 08:44
Africa/Bangui :: 08:44
Africa/Banjul :: 08:44
Africa/Bissau :: 08:44
Africa/Blantyre :: 08:44
Africa/Brazzaville :: 08:44
Africa/Bujumbura :: 08:44
Africa/Cairo :: 08:44
Africa/Casablanca :: 08:44
Africa/Ceuta :: 08:44
Africa/Conakry :: 08:44
Africa/Dakar :: 08:44

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Failed to parse time string (Africa/Dar_es_Salaam) at position 0 (A): The timezone could not be found in the database' in /.../test.php:3 Stack trace: #0 /.../test.php(3): DateTime->__construct('Africa/Dar_es_S...') #1 {main} thrown in /.../test.php on line 3

Hov...?
Avatar billede Slettet bruger
29. juli 2010 - 10:47 #9
Bemærk desuden, at det korrekte output for de første værdier er:

Africa/Abidjan :: 08:46
Africa/Accra :: 08:46
Africa/Addis_Ababa :: 11:46
Africa/Algiers :: 09:46
Africa/Asmara :: 11:46
Africa/Bamako :: 08:46
Africa/Bangui :: 09:46
Africa/Banjul :: 08:46
Africa/Bissau :: 08:46
Africa/Blantyre :: 10:46
Africa/Brazzaville :: 09:46
Africa/Bujumbura :: 10:46
Africa/Cairo :: 11:46
Africa/Casablanca :: 08:46
Africa/Ceuta :: 10:46
Africa/Conakry :: 08:46
Africa/Dakar :: 08:46
Avatar billede Slettet bruger
30. juli 2010 - 02:00 #10
Anyone?
Avatar billede Slettet bruger
30. juli 2010 - 02:01 #11
Anyone?
Avatar billede Slettet bruger
31. juli 2010 - 17:55 #12
Jeg havde selvfølgeligt forbyttet parametrene i DateTime's constructor.
Svar for point.
Avatar billede Slettet bruger
18. august 2010 - 17:41 #13
Nå.
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