更改 PHP 默认时区不起作用



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

相关内容

  • 没有找到相关文章

最新更新