Avatar billede mac10 Nybegynder
19. marts 2011 - 19:08 Der er 6 kommentarer

Udenlands host. Tidszone problem?

Hej allesammen,

Jeg har valgt at hoste mig hos GoDaddy på deres servere i USA da mit publikum hovedsageligt kommer fra USA på mine websites.

Jeg har dog et lille problem med tiden. Når jeg indsætter data og vil have tidspunktet lige nu benytter jeg NOW() i MySQL til at fortælle mig hvad tid noget data bliver skudt ind. Det virker også fint på localhost, men her kommer problemet så.

Jeg benytter dette jQuery plugin:
http://timeago.yarp.com/

Det som den gør er blot at fortælle hvornår data blev smidt ind, så istedet for 19-03-2011 19:05 skriver den "For 1 minut siden" - ligesom på bl.a. Facebook.

Jeg har lige prøvet at smide noget data ind med NOW() og jeg får tidspunktet: 2011-03-19 11:06:11
Og derfor skriver mit plugin "For 8 timer siden" selvom jeg lige har smidt det ind.

Jeg har prøvet at Google lidt, men er lidt i tvivl om hvordan jeg kan få det til at passe overens med alle - uanset hvor i verden man kommer fra.

Er der nogen der har erfaret dette før og måske har en fornuftig løsning på det?

Ville jeg sætte pris på.

På forhånd tak.
Avatar billede majbom Novice
19. marts 2011 - 19:15 #1
det er fordi at serveren bruger usa's tid og når du besøger siden fra danmark (går jeg ud fra), og bruger jQuery (javascript) regner den med din computers tid og så vil du få problemet.

du skal få dine brugere til at registrere deres tidszone og bruge den i din beregning...
Avatar billede mac10 Nybegynder
19. marts 2011 - 19:21 #2
Hej splazz,
tænkte nok det var noget i den stil.

jQuery har ikke indflydelse på dette, da jeg henter data ud fra MySQL så det er ikke javascripten, men jeg kan se det er serverens tid da den laver præcis det samme med:
echo date("d/m/y : H:i:s", time());

Du har vel ikke et trick i ærmet for hvordan jeg løser det ved at få fat i brugerens tidszone? For må ærligt indrømme at tid og dato altid har været noget af et problem for mig at rode med.
Avatar billede mac10 Nybegynder
19. marts 2011 - 19:28 #3
Kan se at jeg med følgende kode kan sætte tiden efter brugerens tidszone (UTC)
$utc = '+1'
echo gmdate('H:i:s',time()+(3600*$utc));

Men hvordan får man fat i brugerens tidszone for at afklare dette. Har prøvet at søge på både PHP og JS løsninger, men synes ikke at kunne finde noget.
Avatar billede DePlex Nybegynder
19. marts 2011 - 19:55 #4
Brug denne function:
date_default_timezone_set("Europe/Copenhagen");
Avatar billede olebole Juniormester
19. marts 2011 - 20:33 #5
<ole>

DePlex >> Er det ikke tværtimod? Hans server står i USA - og hans brugere bor i USA. De har formodentlig ikke problemet - men det har spørger, fordi han requster serveren fra Danmark.

Mon ikke du skal sætte tidszonen efter et geo-check på brugeren? Se evt. Arnes guide:
    http://www.eksperten.dk/guide/568

/mvh
</bole>
Avatar billede mac10 Nybegynder
19. marts 2011 - 22:00 #6
Faldt over denne funktion

function getTimeZoneDateTime($GMT, $timestamp) {
    $timezones = array(
        '-12'=>'Pacific/Kwajalein',
        '-11'=>'Pacific/Samoa',
        '-10'=>'Pacific/Honolulu',
        '-9'=>'America/Juneau',
        '-8'=>'America/Los_Angeles',
        '-7'=>'America/Denver',
        '-6'=>'America/Mexico_City',
        '-5'=>'America/New_York',
        '-4'=>'America/Caracas',
        '-3.5'=>'America/St_Johns',
        '-3'=>'America/Argentina/Buenos_Aires',
        '-2'=>'Atlantic/Azores',// no cities here so just picking an hour ahead
        '-1'=>'Atlantic/Azores',
        '0'=>'Europe/London',
        '1'=>'Europe/Paris',
        '2'=>'Europe/Helsinki',
        '3'=>'Europe/Moscow',
        '3.5'=>'Asia/Tehran',
        '4'=>'Asia/Baku',
        '4.5'=>'Asia/Kabul',
        '5'=>'Asia/Karachi',
        '5.5'=>'Asia/Calcutta',
        '6'=>'Asia/Colombo',
        '7'=>'Asia/Bangkok',
        '8'=>'Asia/Singapore',
        '9'=>'Asia/Tokyo',
        '9.5'=>'Australia/Darwin',
        '10'=>'Pacific/Guam',
        '11'=>'Asia/Magadan',
        '12'=>'Asia/Kamchatka'
    );
    date_default_timezone_set($timezones[$GMT]); //ensures that whenever i return this date, i will get central time
    if ($GMT == -2) $timestamp -= 3600; //since i set that an hour ahead, im subtracting the extra hour now
    return date('Y-m-d H:i:s', $timestamp);
}


Den kan fortælle hva GMT er, og så er det bare at finde ud af det med Javascript, med f.eks.

var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;


Tror i ikke at det kan lade sig gøre den vej? Jeg har fået den til at vise det korrekt når man er fra Danmark, men hvordan kan man teste det fra andre lande om det også passer fint? Har prøvet nogle Proxy surfs, men de viser det samme så det er enten tegn på at det virker eller at proxy serverne stadigvæk registrere jeg er fra GMT+1 selvom jeg surfer via servers i USA.
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