更改PHP默认时区不起作用

时间:2012-08-11 04:14:39

标签: php date timezone

我正在尝试将一行代码添加到以时间开头的html文档中。我希望时区与我相关,但我无法从默认的UTC更改它。我已经将php.ini文件更改为PST以及使用date_default_timezone_set('America / Los_Angeles');然而它仍然比我的时区提前7小时打印时间。下面是处理时间的代码:

session_start();
if(isset($_SESSION['name']))
{
    date_default_timezone_set('America/Los_Angeles');

    $msg = $_POST['text'];

    $fo = fopen("log.html", 'a');
    fwrite($fo, "<div class=msgln>(".date("g:i A").") <b  style=color:red;>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($msg))."<br></div>
    ");
    fclose($fo);
}

3 个答案:

答案 0 :(得分:4)

服务器应设置为UTC,您不应该更改默认值。相反,你想要做的是根据时间创建一个DateTime对象,然后将其转换为你想要的时区,并显示。

$now = new DateTime();
$now->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $now->format('g:i A');

我不知道您的格式字符串是否有效,但格式方法被假定与您在原始示例中使用的date()函数所接受的格式兼容。

答案 1 :(得分:2)

首先确保您使用的是有价值的时区。您可以在PHP文档中找到list of supported timezones

第二个问题是使用date()而未指定时间戳。默认为time()生成的时间戳(基于文档中的注释)是UTC时间。您必须使用strftime()或手动减去与UTC的差异。

答案 2 :(得分:1)

如果您使用'etc / GMT',您可以将dateTime对象设置为所需的时区,如下所示:

$dtz = new DateTimeZone('etc/GMT-10');
$dt = new DateTime(date("Y-m-d h:i A"), $dtz); 
$date = gmdate("Y-m-d h:i A", $dt->format('U'));