【问题标题】:Show different time when at different country在不同的国家显示不同的时间
【发布时间】:2020-05-22 01:22:51
【问题描述】:
想问。
如何创建一个能够在不同国家显示不同时间的网站。
示例:
如果用户在日本使用网站,则会显示日本时间。
如果用户在英国使用网站,则会显示英国时间。
现在我正在使用这个代码:
<?php
date_default_timezone_set("Asia/Tokyo");
echo "Today's date is :";
$today = date("d/m/Y");
echo $today;
?>
【问题讨论】:
标签:
php
html
datetime
timezone
【解决方案1】:
您应该在客户端执行此操作。我读过一次论坛,他们建议在客户端本身完成。从这个 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);
【解决方案2】:
php 中没有可以获取基于用户的时区的函数。但有办法。首先,您必须获取用户 IP 地址,然后您必须调用第三方服务以获取地理信息。因此您可以获得用户时区。
以下函数是迄今为止使用php获取用户IP的万无一失的解决方案。学分归https://stackoverflow.com/a/38852532/7935051
<?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;
}
现在您必须依靠第三方服务来获取地理信息。对于这种类型的工作来说,这是非常正确的。互联网上有几种免费服务,例如 geoPlugin。你可以使用它。见more details。
// 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 变量以获取更多信息