Php 用时区计算时差
我有一个PHP页面和一个数据库,其中我了解以下内容:Php 用时区计算时差,php,datetime,Php,Datetime,我有一个PHP页面和一个数据库,其中我了解以下内容: 服务器时间(运行PHP和DB的服务器) 用户时区 存储在DB中的事件的日期/时间 我的系统允许用户取消事件(加盖特定时间戳),我需要根据用户当前时区确定事件是否在用户时间的12小时内。例如,假设我有以下内容: 服务器时间(GMT):2017年7月1日下午3:30 用户时区:(格林尼治标准时间-7:00)山区时间(美国和加拿大) 活动日期/时间:2017年7月1日下午8:30(山区时间) 根据已知时区计算用户当前时间和事件时间之间的小时
- 服务器时间(运行PHP和DB的服务器)
- 用户时区
- 存储在DB中的事件的日期/时间
- 服务器时间(GMT):2017年7月1日下午3:30
- 用户时区:(格林尼治标准时间-7:00)山区时间(美国和加拿大)
- 活动日期/时间:2017年7月1日下午8:30(山区时间)
我存储的时区值是以下格式的小数:
-7.0
(即山区时间,比格林尼治标准时间晚7小时)。无论发生什么时区计算,都需要能够采用这样的小数
PHP代码是如何做到这一点的?使用PHP的DateTime类的diff()方法,如下所示:-
$user_time= new DateTime('.....',new DateTimeZone('Pacific/Nauru'));
$event_time= new DateTime('....',new DateTimeZone('Pacific/Nauru'));
var_dump($event_time->diff($user_time));
这将为您提供一个DateInterval对象:-
object(DateInterval)[48]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 2
public 'h' => int 11
public 'i' => int 34
public 's' => int 41
public 'invert' => int 0
public 'days' => int 2
从中检索所需的值非常简单。使用PHP的DateTime类的diff()方法,如下所示:-
$user_time= new DateTime('.....',new DateTimeZone('Pacific/Nauru'));
$event_time= new DateTime('....',new DateTimeZone('Pacific/Nauru'));
var_dump($event_time->diff($user_time));
这将为您提供一个DateInterval对象:-
object(DateInterval)[48]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 2
public 'h' => int 11
public 'i' => int 34
public 's' => int 41
public 'invert' => int 0
public 'days' => int 2
从中检索所需的值是微不足道的。在StackOverflow上,您需要编写自己的代码,如果某些代码不起作用,我们会很乐意帮助您修复,但您需要自己研究和编写大部分代码。请查看,如果可以,请使用它!在StackOverflow上,您需要编写自己的代码,如果某些东西不起作用,我们将很乐意帮助您修复它,但您需要自己研究并编写大部分代码。请查看,如果可以,请使用它!Omis这看起来很有希望,但时区必须考虑到等式中,才能获得正确的$user\u时间。这是怎么做到的?我将编辑我的答案,这样你就可以看到包括时区在内的变化。我只得到空白:
$user_time=new DateTime('2017-05-22 13:48:20',new DateTimeZone('Pacific/Nauru')$事件时间=新日期时间('2017-05-22 02:48:20');回声“;变量转储($event\u time->diff($user\u time));回声“代码>我存储的时区值是以下格式的小数:-7.0
(即山区时间,比格林尼治标准时间晚7小时)。无论发生什么时区计算,都需要能够采用那样的小数。Omis这看起来很有希望,但时区必须考虑到等式中的因素,才能获得正确的$user\u时间。这是怎么做到的?我将编辑我的答案,这样你就可以看到包括时区在内的变化。我只得到空白:$user_time=new DateTime('2017-05-22 13:48:20',new DateTimeZone('Pacific/Nauru')$事件时间=新日期时间('2017-05-22 02:48:20');回声“;变量转储($event\u time->diff($user\u time));回声“代码>我存储的时区值是以下格式的小数:-7.0
(即山区时间,比格林尼治标准时间晚7小时)。无论发生什么时区计算,都需要能够采用这样的小数。