Как я могу получить местное время пользователя вместо времени сервера?
Как я могу получить время на стороне клиента? Когда я использую 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);
}
?>