2009-06-18 13 views
0

Je vois la date et l'heure UTC dans tous mes champs de date/heure sur mon serveur, je suis tout à la configuration de fuseau horaire sur mon serveur web étant dans Heure UTC ... ma question est de savoir comment puis-je faire ces dans la date et l'heure des utilisateurs locaux? Toutes les heures sont stockées en UTC sur le serveur MySQL.UTC Problèmes, je ne sais pas comment les résoudre (PHP/MySQL)

J'ai les utilisateurs Ville, Région (Prov/État) et Pays. Dans le pire des cas, je veux afficher les dates et les heures dans le fuseau horaire par défaut de PHP.

Comment faire?

Répondre

1

Vous pouvez utiliser cette fonction et lui transmettre l'adresse "Perth, WA, Australia" comme adresse. Au lieu de renvoyer 0 en cas d'erreur, vous pouvez lui demander de renvoyer le décalage entre le fuseau horaire du serveur et le fuseau horaire PHP par défaut.

Vous voudrez peut-être stocker cela dans une variable de session, et n'appelez la fonction que si la variable est vide, ce qui améliorerait la vitesse de rendu de vos pages.

/** 
* This function finds the geocode of any given place using the geocoding service of yahoo 
* @example getGeoCode("White House, Washington"); 
* @example getGeoCode("Machu Pichu"); 
* @example getGeoCode("Dhaka"); 
* @example getGeoCode("Hollywood"); 
* 
* @param string address - something you could type into Yahoo Maps and get a valid result 
* @return int timeZoneOffset - the number of seconds difference between the user's timezone and your server's timezone, 0 if it fails. 
*/ 
function getTimeZoneOffset($address) { 
    $_url = 'http://api.local.yahoo.com/MapsService/V1/geocode'; 
    $_url .= sprintf('?appid=%s&location=%s',"phpclasses",rawurlencode($address)); 
    $_result = false; 
    if($_result = file_get_contents($_url)) { 
     preg_match('!<Latitude>(.*)</Latitude><Longitude>(.*)</Longitude>!U', $_result, $_match); 
     $lng = $_match[2]; 
     $lat = $_match[1]; 

     $url = "http://ws.geonames.org/timezone?lat={$lat}&lng={$lng}"; 
     $timedata = file_get_contents($url); 
     $sxml = simplexml_load_string($timedata); 
     $timeZoneOffset = strtotime($sxml->timezone->time) - time(); 
     return $timeZoneOffset; 
    } 
    else 
    return 0; 
} 

Code adapté de Time Engine, une classe php LGPL.

Questions connexes