Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP的时区助手_Php_Cakephp - Fatal编程技术网

CakePHP的时区助手

CakePHP的时区助手,php,cakephp,Php,Cakephp,我已经为我的CakePHP应用程序构建了一个简单的时区助手,在这里使用了关于堆栈溢出的各种示例,它根据用户记录保存用户区域。e、 g.欧洲/伦敦 要查看帮助程序,请执行以下操作: 当用户登录应用程序时,我会保存他们登录的日期/时间,以便出于安全原因向用户显示日志列表。e、 g.$this->User->saveField('lastlogin',date('Y-m-dh:i:s') 但是,该日期当前将提取服务器日期/时间。如何利用用户的时区进行修改 我试过: $date=newdatetime(

我已经为我的CakePHP应用程序构建了一个简单的时区助手,在这里使用了关于堆栈溢出的各种示例,它根据用户记录保存用户区域。e、 g.欧洲/伦敦

要查看帮助程序,请执行以下操作:

当用户登录应用程序时,我会保存他们登录的日期/时间,以便出于安全原因向用户显示日志列表。e、 g.$this->User->saveField('lastlogin',date('Y-m-dh:i:s')

但是,该日期当前将提取服务器日期/时间。如何利用用户的时区进行修改

我试过:

$date=newdatetime(null,newdatetimezone($user['user']['timezone'])

然后:
$this->User->saveField('lastlogin',$date->date)但我只是得到空值

但如果我调试$date,我会得到例如:

object(DateTime) {
    date => '2013-04-01 15:22:32'
    timezone_type => (int) 3
    timezone => 'Europe/London'
}
我做错了什么?如何从对象中提取日期时间?

这是处理这个问题的好方法吗?因为这意味着我必须用这个代码片段替换所有
date()
调用,以获得用户的时间。

3.)网站上的日期不会变得不匹配吗?例如,如果欧洲用户在美国用户之后发布内容,但由于使用了当地时间,因此会显示为不同,可能看起来像是在美国用户之前。


我是否应该保存服务器时间,然后使用上面的代码段以不同的方式向用户显示它,这样所有时间都是相同的时区,但相对于用户显示?

我不确定您是否可以使用
saveField()
保存
日期时间
对象。您可能必须以CakePHP认为通用的格式将其转换为字符串:

$this->User->saveField('lastlogin', $date->format('Y-m-d H:i:s'))
您的原始代码可能会触发此通知:

Notice: Undefined property: DateTime::$date
。。。因为类中没有
date
公共属性


关于你的其他问题,正如你已经指出的,你显然不能比较属于不同时区的当地时间,就像你不能比较公里和英里一样。如果您存储本地时间,则还需要存储时区,并每次进行转换。因此,将日期正常化并始终使用相同的时区(UTC或服务器的时区)存储日期,并在显示信息时执行转换就更简单了。这也更有意义,因为帖子作者的当地时间与其他人无关。

这解决了第一个问题。对接下来的两个问题有什么想法吗?