gpt4 book ai didi

php - 使用纪元时间但使用不同时区初始化时,DateTime 不会产生相同的时间

转载 作者:行者123 更新时间:2023-11-29 13:38:25 25 4
gpt4 key购买 nike

我使用 bigint 列类型在 MySQL 中保存了日期为 2013 年 8 月 11 日 - 晚上 11:55(美国东部时间)的值

这将在 bigint 列中保存为 unix 时间,值为:1376279700

我理解这是自 1970 jan 01,01 00:00:00 以来的纪元时间(以秒为单位)。所以我推测,如果我使用任何时区初始化 DateTime ,它应该产生 08/11/2013 - 11:55 PM (以及初始化时使用的任何时区)。

但给出以下代码:

$time1 = new DateTime("@1376279700");
$time1->setTimezone("Europe/London");
echo "Created Europe/London - ".$time1->format(DateTime::RFC822);

$time2 = new DateTime("@1376279700");
$time2->setTimezone("America/New_York");
echo "Created America/New_York - ".$time2->format(DateTime::RFC822);

我得到这些值:

Created: Europe/London - Mon, 12 Aug 13 04:55:00 +0100

Created: America/New_York - Sun, 11 Aug 13 23:55:00 -0400

Europe/London 时区会 self 调整,并且神奇地知道 1376279700 是使用 EST 时区创建的。

我在这里很困惑。请在这里阐明一些情况。我正在尝试创建一个时区感知函数,其中事件的开始日期 (08/11/2013 11:55 PM) 由我的用户的时区使用。

最佳答案

当您传递 Unix 时间戳时,构造函数会忽略时区。

$ts = new DateTime('@946684800');
echo $ts->format('Y-m-d H:i:s') . PHP_EOL; // 2000-01-01 00:00:00

// Setting the time zone does nothing *here* . . .
$pac_tz = new DateTimeZone('America/Los_Angeles');
$ts = new DateTime('@946684800', $pac_tz);
echo $ts->format('Y-m-d H:i:s') . PHP_EOL; // 2000-01-01 00:00:00

// But you can ask for the "same" timestamp
// in a particular time zone.
$ts->setTimeZone($pac_tz);
echo $ts->format('Y-m-d H:i:s') . PHP_EOL; // 1999-12-31 16:00:00

echo '=============' .PHP_EOL;

$time1 = new DateTime("@1376279700");
echo $time1->format('Y-m-d H:i:s').PHP_EOL; // 2013-08-12 03:55:00

$time1_tz = new DateTimeZone("Europe/London");
$time1->setTimezone($time1_tz);
// If it's 2013-08-12 03:55:00 in UTC, what time is it in London?
// London isn't on UTC in the summer (now, as I write this).
echo "Created Europe/London - ".$time1->format(DateTime::RFC822) . PHP_EOL;

$time2 = new DateTime("@1376279700"); // Same as $time1
echo $time2->format('Y-m-d H:i:s').PHP_EOL;

$time2_tz = new DateTimeZone("America/New_York");
// If it's 2013-08-12 03:55:00 in UTC, what time is it in New York?
$time2->setTimezone($time2_tz);
echo "Created America/New_York - ".$time2->format(DateTime::RFC822) . PHP_EOL;

所有输出。 。 .

2000-01-01 00:00:00
2000-01-01 00:00:00
1999-12-31 16:00:00
=============
2013-08-12 03:55:00
Created Europe/London - Mon, 12 Aug 13 04:55:00 +0100
2013-08-12 03:55:00
Created America/New_York - Sun, 11 Aug 13 23:55:00 -0400

关于php - 使用纪元时间但使用不同时区初始化时,DateTime 不会产生相同的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456085/

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