2

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

我现在在做什么

AppController我已经这样做了

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

  }}

也不知道怎么回声

4

2 回答 2

2

我们可以在不使用数据库的情况下找到客户端位置,为此我们需要使用一些 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地址并在会话中写入然后使用它

于 2013-06-24T09:58:20.017 回答
1

管理时间的一种简单方法是将所有日期和时间保存为 GMT+0 或 UTC。取消注释 d 行ate_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 )提供时区

于 2013-06-24T09:31:50.547 回答