【问题标题】:How can I get the user's local time instead of the server's time?如何获取用户的本地时间而不是服务器的时间?
【发布时间】:2011-02-11 21:37:30
【问题描述】:

如何获取客户端的时间? 当我使用date() 时,它会返回服务器的时间。

【问题讨论】:

  • 对我有用的解决方案是在 javascript 中设置一个 cookie 并从 PHP 中读取它。当然,您可以从上一页加载中获得时间。
  • stackoverflow.com/a/62344221/12910765 这可能有助于使用 php 在访问者的时区显示 php 现在时间

标签: php javascript


【解决方案1】:

这是一个“PHP”解决方案:

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

【讨论】:

  • 如果一个脚本要在服务器上执行,js怎么知道客户端电脑上的时间。
  • 为什么我会收到这个错误Parse error: syntax error, unexpected T_ECHO
  • 你可以把这个解决方案写成这样的php函数:function the_local_time ($time) { ?&gt; &lt;script type="text/javascript"&gt; var myDate = new Date('&lt;?php echo $time; ?&gt;') document.write(myDate.toLocaleString()) &lt;/script&gt; &lt;?php }
  • @SachinKanungo 有点晚了,但对于其他人来说,这是因为 javascript 在浏览器中的客户端执行,它返回的时间是客户端的时间。另一方面,PHP 代码在服务器上执行,这样您就可以得到服务器的时间。
【解决方案2】:

大家都提到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>");

这里是a list of additional JavaScript Date and Time functions,你可以随意摆弄。

【讨论】:

  • 所以服务器向客户端发送时间标头但客户端不向服务器发送?为什么?
  • stackoverflow.com/a/62344221/12910765 这可能有助于在访问者的时区显示 php 现在时间
【解决方案3】:

您可以使用按 IP 地址进行地理定位来确定用户所在的国家/地区,然后使用它。

但使用 Javascript 或让用户选择时区可能会更好。

【讨论】:

    【解决方案4】:

    由于 PHP 在服务器端运行,您无法从 PHP 访问客户端时间:PHP 对浏览器了解不多--您可以拥有 PHP 脚本无需从浏览器调用即可运行。

    但是你可以从 Javascript 中获取它 (在客户端执行),然后通过 Ajax 请求将其传递给 PHP,例如.


    这里有几个问题+答案可能会帮助您入门:

    【讨论】:

    • 好吧,可能只是客户端通过 Header 或其他什么方式抛出了它的时间,毕竟服务器也这样做了。
    【解决方案5】:

    据我所知,PHP 只是服务器端。

    您可能想使用 JavaScript。

    【讨论】:

      【解决方案6】:

      正如其他人所提到的,您可以使用基于 IP 地址的地理位置服务。

      由于 IP 位置的准确性,我发现它延迟了大约 18 秒,通过使用 $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);
         }
         ?>
      

      【讨论】:

        猜你喜欢
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-15
        • 2012-05-19
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        相关资源
        最近更新 更多