Php 获取UNIX时间戳的正确小时数

Php 获取UNIX时间戳的正确小时数,php,unix-timestamp,Php,Unix Timestamp,我认为这是一个愚蠢的问题,但似乎我找不到答案 我有这个时间戳:1295598602 在我的php脚本中,我有: $date=日期('Y-m-d',1295598602); $hour=日期('H',1295598602)。:00'; 这将返回: 日期:2011-01-21 时间:03:00 现在我去了一个在线转换网站来测试这个。我用过。 但对于这个时间戳值,它似乎是 2011年1月21日星期五08:30:02 GMT 现在,哪一个是正确的?在GMT/UTC中(它们几乎完全相同),时间戳实际上是2

我认为这是一个愚蠢的问题,但似乎我找不到答案

我有这个时间戳:1295598602

在我的php脚本中,我有:

$date=日期('Y-m-d',1295598602); $hour=日期('H',1295598602)。:00';

这将返回:

日期:2011-01-21
时间:03:00

现在我去了一个在线转换网站来测试这个。我用过。 但对于这个时间戳值,它似乎是

2011年1月21日星期五08:30:02 GMT

现在,哪一个是正确的?

在GMT/UTC中(它们几乎完全相同),时间戳实际上是2011年1月21日星期五08:30:02 GMT

如果您位于不同的时区,但始终需要GMT,则根据函数说明,您需要使用
gmdate()
函数,而不是
date()

时间戳是可选的,默认为 时间的值()

根据函数描述,返回GMT时间戳

因此,PHP会转换到您的时区,而不会转换到您的时区。

使用正确的时区:

>> date_default_timezone_get();
'UTC'
>> date('Y-m-d h:i:s',1295598602);
'2011-01-21 08:30:02'
>> date_default_timezone_set('CET');
true
>> date('Y-m-d h:i:s',1295598602);
'2011-01-21 09:30:02'
>> date_default_timezone_set('UTC');
true
>> date('Y-m-d h:i:s',1295598602);
'2011-01-21 08:30:02'

两者都是正确的。在代码段中,PHP根据时区进行调整。尝试
date\u default\u timezone\u set('UTC')
获取正确的未调整值。

另一个选项是为脚本设置默认时区

比如说,

date_default_timezone_set('Europe/London');
$timestamp = '1295598602';
echo date('Y-m-d H:i:s', $timestamp);
将得到与联机转换工具显示的结果相同的结果

PHP中有许多与时区相关的函数,允许您修改显示的时区


您可以查看PHP文档中的选项列表:

它将取决于服务器的时区,并且online servicedate_default_timezone_set()仅在PHP 5.1.0及更高版本中可用,可能不可用。真的吗?PHP5.2现在不再受到开发者的支持。如果有人还不满5.1岁,他们应该首先考虑升级。我见过一家托管公司,它的共享托管web服务器上仍然只有PHP4.3.2。那又怎样?我见过人们做其他愚蠢的事情。我总是假设人们使用当前(或最新)的技术工作。如果他们不这样做,他们需要清楚地陈述,这样我就可以考虑我是否愿意和他们合作,而且要付出什么代价(因为它肯定不会是我通常的速率)。我的观点是,如果你特别想要GMT,那就有一个很好的函数,它总是返回GMT,而不需要改变时区。在每一个版本的PHP中都是如此。
欧洲/伦敦
时区尊重夏令时。改用
UTC
GMT