Показать другое время, когда в другой стране - PullRequest
1 голос
/ 06 февраля 2020

Хочу спросить. Как мне создать сайт, который может показывать разное время, когда в другой стране. Пример:

Если пользователь использует сайт в Японии, он покажет время Японии.

Пока Если пользователь использует сайт в Британии, он покажет время Великобритании.

Прямо сейчас я использую этот код:

<?php
   date_default_timezone_set("Asia/Tokyo");
   echo "Today's date is :"; 
   $today = date("d/m/Y"); 
   echo $today;
?>

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

В php нет функции, которая может получить пользовательский часовой пояс. Но есть и обходной путь. Сначала вам нужно получить IP-адрес пользователя, а затем позвонить в стороннюю службу для получения геоинформации. Таким образом, вы можете получить часовой пояс пользователя.

Следующая функция является надежным решением для получения IP-адреса пользователя с использованием php. И кредиты идут на { ссылка }

<?php

function getClientIp() {
    $ipAddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipAddress = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipAddress = $_SERVER['HTTP_X_FORWARDED'];
    } elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
    } elseif (isset($_SERVER['HTTP_FORWARDED'])) {
        $ipAddress = $_SERVER['HTTP_FORWARDED'];
    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ipAddress = $_SERVER['REMOTE_ADDR'];
    } elseif (getenv('REMOTE_ADDR')) {
        $ipAddress = getenv('REMOTE_ADDR');
    } else {
        $ipAddress = 'Unknown';
    }

    return $ipAddress;
}

Теперь вы должны зависеть от сторонних сервисов для получения геоинформации. Это очень верно для этого типа работ. На inte rnet есть несколько бесплатных сервисов, например, geoPlugin. Вы можете использовать это. См. подробнее .

// Gets the client IP
$userIp = getClientIp();

$geoInfo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip={$userIp}"));

// Gets the timezone
$timezone = $geoInfo['geoplugin_timezone'];

// Sets user timezone, otherwise uses default
if ($timezone) {
    date_default_timezone_set($timezone);
} else {
    date_default_timezone_set('Asia/Tokyo');
}

echo "Today's date is :";
$today = date("d/m/Y");
echo $today;

Кстати, вы можете отладить $geoInfo переменных, чтобы получить больше информации

1 голос
/ 06 февраля 2020

Вы должны сделать это на стороне клиента. Я прочитал форум один раз, и они рекомендовали сделать это в клиенте как таковом. Возьмите то, что, по вашему мнению, может вам помочь из этого javascript кода:

var now = new Date();
var utcString = now.toISOString().substring(0, 19);
var year = now.getFullYear();
var month = now.getMonth() + 1;
var day = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
var localDatetime = year + "-" +
    (month < 10 ? "0" + month.toString() : month) + "-" +
    (day < 10 ? "0" + day.toString() : day) + "T" +
    (hour < 10 ? "0" + hour.toString() : hour) + ":" +
    (minute < 10 ? "0" + minute.toString() : minute) +
    utcString.substring(16, 19);
//var datetimeField = document.getElementById("myDatetimeField");
//datetimeField.value = localDatetime;
alert(localDatetime);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...