我有一个网站,根据服务器日期时间插入所有记录,比GMT晚6个小时。我希望在GMT中显示这些日期时间而不更改插入日期时间。我的意思是PHP中是否有任何全局设置允许我在GMT中显示日期时间而不影响我显示日期时间的每一行? 而且我也不想更改插入脚本,该脚本将继续根据当前时区插入日期时间。
由于
答案 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时区中转换,无论您的服务器时区是什么。
如果您想使用程序功能,在您的情况下可以使用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)