1

我正在尝试将一行代码添加到前面有时间的 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);
}
4

3 回答 3

5

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

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

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

于 2012-08-11T04:33:09.773 回答
1

首先确保您使用的是有价值的时区。您可以在 PHP 文档中找到支持的时区列表。

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

于 2012-08-11T04:17:13.847 回答
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'));
于 2012-08-11T06:14:00.547 回答