gpt4 book ai didi

php - 不使用 UTC 显示时区

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:17 25 4
gpt4 key购买 nike

我整个上午都在阅读有关如何执行此操作的信息,普遍的共识是:将时间戳存储在 UTC 中并从那里计算偏移量。

但是,与大多数人一样,我正在维护一个现有的代码库,我无法更改我们存储日期的方式。至少,不在规定的时间范围内。

所以我的问题是,我可以安全地做这样的事情吗?

// this is my time zone
$timestamp = strtotime($timestampFromDatabase);
date_default_timezone_set('America/New York');
$tz = date_default_timezone_get();

// this is theoretically their timezone, which will eventually
// be taken from a session variable
date_default_timezone_set('Europe/Paris');
$offset = time() - $timestamp;
$timestamp -= $offset;

// now that I have the offset, display dates like this
date('r', $timestamp);

有些人建议不要进行日期算术运算,但我在这里做错了吗?有没有更好的办法?我需要注意哪些陷阱?我特别感兴趣的是这种方法会产生什么样的错误,如果有的话,它们会影响到谁?

我的老板是那种不在乎错误是否只影响 1% 的用户群的人。

编辑:我可以更清楚地说明这一点吗?我似乎没有太多的接受者。任何人?即使是模糊的建议或链接也会非常有帮助。

最佳答案

简短的回答是时区很难处理,没有人愿意解决难题!

越长,答案是这样的:

首先,您需要在他们当前的时区中创建您的日期的表示。以下是等价的:

date_default_timezone_set('America/New York');

$date = new DateTime(null);

$date = new DateTime(null, new DateTimeZone('America/New York'));   

这会为您提供一个区域设置为美国/纽约的日期。我们可以轻松地将其转换为用户时区,在本例中为 Europe/Paris,下一行:

$date->setTimezone(new DateTimeZone('Europe/London'));

您可以使用以下行获取任何时间点的日期/时间。

echo $date->format('d/m/Y H:i:s');

强烈推荐这个而不是算术,因为内置的 PHP 函数了解夏令时和许多您不会做对的复杂事情。


我的完整测试脚本:

date_default_timezone_set('America/Belize');

$date = new DateTime(null);

echo $date->format('d/m/Y H:i:s') . '<br>';

$date->setTimezone(new DateTimeZone('Europe/London'));

echo $date->format('d/m/Y H:i:s') . '<br>';

关于php - 不使用 UTC 显示时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1561810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com