13. september 2009 - 16:34Der er
7 kommentarer og 1 løsning
Bruger tidszone til server tids zone
Hej jeg har lidt hyr med at gøre sådan at min hjemmesiden kan klare flere tidszoner.
Jeg har fået det lavet sådan at jeg kan lave serverens tider om til brugerens tider. ved. function toUserTime($timezone, $format, $time) { date_default_timezone_set($timezone); echo date($format, $time); }
- $timezone, brugerens tids zone. - $format, formatet tiden skal vises i "H:i:s osv." - $time, er så UNIX time stampet i "server timer"
Dog har jeg lidt problemer, da jeg har en side hvor brugeren kan indtaste en dato. Denne indtasting vil blive lavet om til et UNIX timespamp, via mktime(). Dog giver dette en forkert data, da serveren tror det er dens local time (GMT) og brugeren tror at den er hans locale tid (GMT +2). Hvordan kan jeg lave dette så mktime() gennerer unix timespamtet ud fra min brugers tidszone?
Ja men problemet er at det sætter alt have php fortagers sig på den tids zone. Har lavet lidt ændringer i mit script
Denne funktion skulle meget gerne lave en bruger's input dato om til server tid.
protected function UserDateToServer($year, $month, $day, $hour, $min, $sek) { try { $userTimezone = new DateTimeZone($this->TimeZone); $ServerTimezone = new DateTimeZone($this->ServerTimeZone); $myDateTime = new DateTime($year."-".$month."-".$day." ".$hour.":".$min.":".$sek, $userTimezone); $offset = $ServerTimezone->getOffset($myDateTime); return $myDateTime->format('U') + $offset; } catch(Exception $e) { return time(); } }
Denne skulle meget gerne lave en server tid om til en bruger tid protected function toDate($format, $time) { $userTimezone = new DateTimeZone($this->UserTimeZone); $ServerTimezone = new DateTimeZone($this->ServerTimeZone); $myDateTime = new DateTime(date("Y-m-d H:i:s", $time), $ServerTimezone); $offset = $userTimezone->getOffset($myDateTime); echo date($format, $myDateTime->format('U') + $offset); }
Det ser ud til at virke, men er stadig meget itvivl om den faktisk gør det rigtigt.
public function toDate($format, $time) { $myDateTime = new DateTime(); $myDateTime->setTimezone(new DateTimeZone($this->UserTimeZone)); $myDateTime->setTimestamp($time); echo $myDateTime->format($format); }
Tusind tak, mit hovede spinder stadig væk for at prøve at dette til at virke :D Gider du skrive noget som et svar så du kan få dine venfortjænte point? :D
Hmm min host servage køre 5.2.x dog virker det fint der.
Synes godt om
Ny brugerNybegynder
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.