Как я могу получить местное время пользователя вместо времени сервера?

Как я могу получить время на стороне клиента? Когда я использую date() возвращает время сервера.

5 ответов

Решение

Как уже упоминалось, PHP отображает только время на стороне сервера.

Для клиентской части вам понадобится Javascript, что-то вроде следующего должно помочь.

var currentTime = new Date();
var hours = currentTime.getHours();
var minutes = currentTime.getMinutes();

if (minutes < 10) {
    minutes = "0" + minutes;
}

document.write("<b>" + hours + ":" + minutes + " " + "</b>");

И если вы хотите суффикс AM/PM, должно работать что-то вроде следующего:

var currentTime = new Date();
var hours = currentTime.getHours();
var minutes = currentTime.getMinutes();

var suffix = "AM";

if (hours >= 12) {
    suffix = "PM";
    hours = hours - 12;
}

if (hours == 0) {
    hours = 12;
}

if (minutes < 10) {
    minutes = "0" + minutes;
}

document.write("<b>" + hours + ":" + minutes + " " + suffix + "</b>");

Вот список дополнительных JavaScript Date а также Time функции вы можете возиться с.

Вот решение "PHP":

echo '<script type="text/javascript">
var x = new Date()
document.write(x)
</script>';

Вы можете использовать Geolocation по IP-адресу, чтобы определить, в какой стране находится пользователь, а затем использовать это.

Но использование Javascript или предоставление пользователю выбора часового пояса, вероятно, будет лучше.

Поскольку PHP работает на стороне сервера, вы не можете получить доступ к времени на стороне клиента из PHP: PHP мало что знает о браузере - и вы можете иметь сценарии PHP, которые запускаются без вызова из браузера.

Но вы можете получить его из Javascript (который выполняется на стороне клиента), а затем передать его в PHP через Ajax-запрос, например.


И вот пара вопросов + ответы, которые могут помочь вам начать:

PHP на стороне сервера, насколько я знаю.

Возможно, вы хотите использовать JavaScript.

Как уже упоминали другие, вы можете использовать службы геолокации на основе IP-адреса.

Я обнаружил, что он отключился примерно на 18 секунд из-за точности определения IP-адреса, используя смещение $responseTime, это помогло мне сузить его до 2-секундной точности в расположении зрителей.

  <?php; 

   echo deviceTime('D, M d Y h:i:s a');

   function deviceTime($dateFormatString)
   { 
        $responseTime = 21;
        $ip = (isset($_SERVER["HTTP_CF_CONNECTING_IP"])?$_SERVER["HTTP_CF_CONNECTING_IP"]:$_SERVER['REMOTE_ADDR']);
        $ch = file_get_contents('https://ipapi.co/'.$viewersIP.'/json/');
        $ipParts = json_decode($ch,true);
        $timezone = $ipParts['timezone'];
        $date = new DateTime(date('m/d/Y h:i:s a', time()+$responseTime));
        $date->setTimezone(new DateTimeZone($timezone));
    return $date->format($dateFormatString);
   }
   ?>
Другие вопросы по тегам