【问题标题】: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还是JavaScript?
  • php 需要它

标签: 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);

【讨论】:

  • 用php怎么样?
【解决方案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 变量以获取更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多