gpt4 book ai didi

php - 以 ET 而不是 EST 或 EDT 显示时间

转载 作者:行者123 更新时间:2023-12-02 06:20:31 24 4
gpt4 key购买 nike

我有一个小片段,可以像这样为时间戳格式化日期:(YYYY-MM-DD H:M:S T ) Ex: 2011-09-29 17:00:46 EST or 2011-09 -29 17:00:46 美国东部时间

我想将 EST 和 EDT 转换为 ET 并改为显示 ET,这样用户就不必担心日光节省。我该怎么做?

    $timeZone = new DateTimeZone('America/New_York');
$processedDate = str_replace(".000000", "", $timestamp);
$dateTime = new DateTime($processedDate, new DateTimeZone('GMT'));
$dateTime->setTimezone($timeZone);
$processedDate = $dateTime->format('Y-m-d H:i:s') . ' ' . $dateTime->format('T');
echo processedDate;

最佳答案

你想做的事情不切实际,会导致你的用户讨厌你。

命名时区背后的全部原因是为了准确表示本地时间。当该本地区域在 DST 内时,将“标准”时间表示为本地时间在客观上是不正确的。任何在该时区内读取时间的人都会被误导。

如果您需要存储和使用忽略时区的日期和时间,则为此目的使用 UTC,即存储和正常数学。值得记住的是,即使是古老的 Unix 时间戳也是“1970 年 1 月 1 日午夜过后的秒数,UTC”。

如果您需要向用户展示本地时间,那么您应该允许他们选择他们本地的时区,并在显示时进行转换。现代 PHP 的 DateTime 和 DateTimeZone 使这变得非常简单。从交互式提示:

php > $utc = new DateTimeZone('UTC');
php > $amla = new DateTimeZone('America/Los_Angeles');
php >
php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc);
php > $two_past_midnight->setTimeZone($amla);
php > echo $two_past_midnight->format('Y-m-d H:i:s');
2011-04-04 17:02:00

没有困惑,没有大惊小怪。当我们切换时区时,它会为我们处理数学问题。

或者,如果您真的、真的、真的想要拉平 DST 时区,请查看 getTransitions 和 getOffset 以及各种时区 date() 格式,尤其是我。您可以戳戳结果信息以查找任何 DST 区域的“标准”版本下一次转换的时间并相应地进行调整。请记住,不同的区域在不同的时间过渡,并非所有区域的过渡量都相同……有些区域根本不过渡。我想有人已经提到印第安纳州了。

通常我也会在这里提供示例代码,但日期数学让我对暴力充满了永不满足的渴望。谁决定 60、60、24、7、4-6、12 和 52 是可以接受的时间和日期思考方式的人都是邪恶的人。值得庆幸的是,它们都已经死去数百年甚至数千年了。

关于php - 以 ET 而不是 EST 或 EDT 显示时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056778/

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