如何根据Cakephp中的国家时区显示时间

时间:2013-06-24 09:20:11

标签: cakephp date time timezone cakephp-2.0

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

这就是我现在正在做的事情

AppController 中我已经完成了这个

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

  }}

不知道怎么回声

2 个答案:

答案 0 :(得分: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地址并在会话中写入然后使用它

答案 1 :(得分:1)

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

接下来,在您的用户表格中添加一个时区字段,并进行必要的修改以允许您的用户设置他们的时区。现在我们知道登录用户的时区,我们可以使用时间助手纠正我们帖子的日期和时间:

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

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

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