在PHP中以GMT服务器范围显示日期时间

时间:2011-03-15 05:20:09

标签: php datetime timezone

我有一个网站,根据服务器日期时间插入所有记录,比GMT晚6个小时。我希望在GMT中显示这些日期时间而不更改插入日期时间。我的意思是PHP中是否有任何全局设置允许我在GMT中显示日期时间而不影响我显示日期时间的每一行? 而且我也不想更改插入脚本,该脚本将继续根据当前时区插入日期时间。

由于

3 个答案:

答案 0 :(得分:2)

不幸的是,PHP只有一个全局时区设置:

; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/Los_Angeles

它会影响解析和渲染,因此更改此值将影响所有日期。

如果您只关心显示,可以使用gmdate()功能渲染GMT日期。它的工作方式与date()函数完全相同,只不过它以GMT格式呈现日期。有关详细信息,请参阅the gmdate documentation

答案 1 :(得分:1)

您需要修改您提取的服务器时间的任何日期时间,不能修改默认时区(完全无论如何,请参阅更改它的程序方法并重新设置它) )。下面有3个选项。

我建议使用DateTIme对象,因为它提供了最大的简单性和灵活性。


使用DateTime对象

创建DateTime时不应该执行任何操作,因此使用服务器时区创建它,但是您需要调用setTimezone

以下是一个例子:

// Could just call this once, and use a reference to it.
$timezone = new DateTimeZone('GMT');

$insertDate = new DateTime($row['insertDate']);
$insertDate->setTimezone($timezone);

现在$insertDate将在GMT时区中转换,无论您的服务器时区是什么。


使用程序Date/Time Functions

如果您想使用程序功能,在您的情况下可以使用gmdate,或者如果您需要GMT以外的其他时区,则必须使用date_default_timezone_set

// Storing so you can restore the current default
$serverTimezone = date_default_timezone_get();

/** 
 * Get the unix timestamp for the insertDate
 * This converts from the default timezone to UTC
 */
$insertDate = strtotime($row['insertDate']);


date_default_timezone_set('GMT');

/**
 * This displays the date in the new default timezone GMT, based
 * on the UTC timezone of the unix timestamp
 */
echo date('Y-m-d H:i:s', $insertDate);

// Reset the timezone
date_default_timezone_set($serverTimezone);

这可以抽象成自己的功能,以免你麻烦。


使用gmdate - 仅适用于GMT

与上面显示的程序示例类似,但我们不需要使用默认时区。

/** 
 * Get the unix timestamp for the insertDate
 * This converts from the default timezone to UTC
 */
$insertDate = strtotime($row['insertDate']);

/**
 * This displays the date in GMT, based
 * on the UTC timezone of the unix timestamp
 */
echo gmdate('Y-m-d H:i:s', $insertDate);

答案 2 :(得分:0)

使用date.timezone

在php.ini中,添加以下行:

date.timezone = "Etc/GMT-6"

要查看所有可能的格式,请查看this