3 votes

Comment obtenir la date actuelle de l'utilisateur et non du serveur ?

J'utilise cette simple ligne de code pour obtenir la date actuelle dans ma variable.

$datevar = date("Y-m-d"); 

Mais cela me donne la date actuelle du serveur et non celle de l'utilisateur. J'ai une page où des utilisateurs du monde entier se connectent, donc c'est un problème. Est-ce que je peux le faire avec php ou est-ce que je dois faire appel à js ?

3voto

ABelikov Points 523

Vous pouvez le faire de deux façons. Envoyer l'information du navigateur au serveur par Javascript OU utiliser un des services "Location-by-IP".

Vous pouvez trouver la solution Javascript ici obtenir le fuseau horaire de l'utilisateur (merci à @bennes)

Mais si vous voulez le faire uniquement du côté serveur, vous pouvez utiliser ce service. https://timezoneapi.io/developers/ip-address

Voici un exemple

// Get IP address
$ip_address = getenv('HTTP_CLIENT_IP') ?: 
getenv('HTTP_X_FORWARDED_FOR') ?: getenv('HTTP_X_FORWARDED') ?: 
getenv('HTTP_FORWARDED_FOR') ?: getenv('HTTP_FORWARDED') ?: 
getenv('REMOTE_ADDR');
// Get JSON object
$jsondata = file_get_contents("http://ip-api.com/json/" . $ip_address); 
// Decode
$data = json_decode($jsondata, true);

// Example: Get the city parameter
echo "City: " . $data['city'] . "<br>";
// Example: Get the users time
echo "Time: " . $data['timezone'] . "<br>";

Bien sûr, il est préférable de sauvegarder le décalage dans $_SESSION. Sinon, cela générera une requête sortante à chaque fois.

Il vous faut donc quelque chose comme

session_start();
if (!isset($_SESSION['offset_hours'])) {
    $ip_address = getenv('HTTP_CLIENT_IP') ?: getenv('HTTP_X_FORWARDED_FOR') ?: getenv('HTTP_X_FORWARDED') ?: getenv('HTTP_FORWARDED_FOR') ?: getenv('HTTP_FORWARDED') ?: getenv('REMOTE_ADDR');
    $jsondata = file_get_contents("http://timezoneapi.io/api/ip/?" . $ip_address);
    $data = json_decode($jsondata, true);
    if($data['meta']['code'] == '200'){
        $_SESSION['offset_hours']= $data['data']['datetime']['offset_hours'];
    }    
}

echo $_SESSION['offset_hours']; // Here is offset in hours

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X