我正在尝试将一行代码添加到前面的html文档中。我希望时区相对于我,但是我无法从默认 UTC 更改它。我已经将 php.ini 文件中更改为 PST 并使用 date_default_timezone_set('美国/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);
}
服务器应设置为 UTC,并且您不应更改默认值。 相反,您要做的是基于时间创建一个 DateTime 对象,然后将其转换为所需的时区并显示。
$now = new DateTime();
$now->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $now->format('g:i A');
我不知道您的格式字符串是否有效,但格式方法应该与您在原始示例中使用的 date() 函数所接受的方法兼容。
首先,请确保您使用的是有价值的时区。您可以在 PHP 文档中找到支持的时区列表。
第二个问题是使用 date() 而不指定时间戳。这默认为 time() 生成的时间戳(基于文档中的注释)是 UTC 时间。你要么必须使用 strftime(),要么手动从 UTC 中减去差值。
如果使用"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'));