【问题标题】:How to display time according to country timezone in Cakephp如何在 Cakephp 中根据国家时区显示时间
【发布时间】:2013-06-24 09:20:11
【问题描述】:

我正在 cakephp 2.2 上构建一个网络应用程序..我是 cakephp 的新手,从来没有使用过时间..问题是我想显示网站正在查看的时间..例如,如果有人正在查看我在澳大利亚的网站,他可以根据他们的国家看到时间。我想显示单独的日期和时间..不想结合时间和日期

我现在在做什么

AppController中我已经做到了

 public function beforeRender(){
   if ($this->Auth->login() || $this->Auth->loggedIn()) {
     App::uses('CakeTime', 'Utility');

  }}

也不知道怎么回声

【问题讨论】:

    标签: cakephp date time timezone cakephp-2.0


    【解决方案1】:

    我们可以在不使用数据库的情况下找到客户端位置,为此我们需要使用一些 api,例如我使用了主机 api。

    控制器代码:

                $clientIpAddress = $this->request->clientIp();
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://api.hostip.info/get_html.php?ip=$clientIpAddress&position=true");
        curl_setopt($ch, CURLOPT_HEADER,0);
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($ch);
    

    $data 将返回以下示例:Country: UNITED STATES (US) City: Aurora, TX Latitude: 33.0582 Longitude: -97.5159 IP: 12.215.42.19

    所以你从这个 $data 中得到了位置。

    在视图文件中使用如下:

    $this->Time->format('F jS, Y h:i A',date('M d, Y h:i:s'), null,'Aurora, TX');
    

    但不要忘记在会话中写入城市名称、IP 地址值,因此无需在每次为单个用户加载页面时发送 curl 请求。只是第一次找到位置和IP地址并在会话中写入然后使用它

    【讨论】:

    • 它不起作用。我将您的控制器代码写入我的 AppController 中的 beforeRender 函数中。我编写代码的视图也是如此。但它在我的视图页面上没有显示任何内容。 .当我调试 $data ..这是我的视图页面上出现的内容国家:(私人地址)(XX)城市:(私人地址)纬度:经度:IP::::1
    • 你正在检查你的本地主机或服务器吗?
    • 本地主机有公共ip,所以代码只能在服务器上运行。在 localhost 中,它将返回 $data 如下“国家:(私人地址)(XX)城市:(私人地址)纬度:经度:IP:127.0.0.1”
    • uhhh...您如何期望Aurora, TX 解析到时区?它必须是 PHP 支持的 valid IANA time zone id,不是吗? (例如,America/Chicago)。您可能需要here 中的一种方法。此外 - 通过 IP 地址进行地理定位通常不是确定时区的安全方法。您可能正在获取某些 Internet 代理服务器的时区。
    • 嘿@Matt Johnson 我只是举了一个例子,他需要弄清楚。因为我们不能坐下来为每一个权利写出 100% 完美的代码
    【解决方案2】:

    管理时间的一种简单方法是将所有日期和时间保存为 GMT+0 或 UTC。取消注释 date_default_timezone_set('UTC'); in app/Config/core.php 行以确保您的应用程序的时区设置为 GMT+0。

    接下来将时区字段添加到您的用户表并进行必要的修改以允许您的用户设置他们的时区。现在我们知道了登录用户的时区,我们可以使用 Time Helper 更正帖子上的日期和时间:

    echo $this->Time->format('F jS, Y h:i A', $post['Post']['created'], null, $user['User']['time_zone']);
    

    前提是你应该知道用户的时区,如果你为每个注册用户存储时区会更好。

    如果您不想用作注册用户,您还可以跟踪并使用一些第三方服务来提供来自 IP 地址的时区,例如ip2location

    【讨论】:

    • 我没有将时间存储在数据库中......我只想根据国家/地区显示或回显时间
    • 谢谢你,我知道了。好吧,所以我想出了一个解决方案,为什么我不创建用户设置时间的时区设置页面。你能告诉我如何在数据库中存储时间吗?意味着它应该是什么格式,然后如何检索它?
    • stackoverflow.com/questions/4561291/…bothe 上面的评论对于存储 gmt 时间和时区非常有用
    猜你喜欢
    • 2013-04-15
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多