在 PHP 中检索当前时间时如何考虑夏令时?

发布于 2024-11-30 15:40:57 字数 107 浏览 1 评论 0原文

当通过 PHP 脚本 (time()) 获取时间时,在夏令时期间,它似乎返回一个相差一小时的时间值。有没有办法获得正确的时间,考虑到夏令时?

When getting the time via PHP script (time()), during Daylight Savings Time it seems to return a time value that is one hour off. Is there any way to get the correct time, accounting for Daylight Savings Time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

凝望流年 2024-12-07 15:40:57

time() 返回一个 Unix 时间戳,Unix 时间戳是一个固定的时间段:自 Unix 纪元以来的秒数。它不受时区的影响。

一旦获得了精确的时刻,您可能想要计算给定地点的本地时间:

<?php

$now = time();
echo $now . PHP_EOL;

date_default_timezone_set('Europe/Madrid');
echo date('r', $now) . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
echo date('r', $now) . PHP_EOL;

...将为同一时间戳打印不同的本地日期:

1313683738
Thu, 18 Aug 2011 18:08:58 +0200
Fri, 19 Aug 2011 01:08:58 +0900

相同的推理适用于相反的操作:

<?php

date_default_timezone_set('Europe/Madrid');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

...将打印不同的时间戳:

978303330
978274530

time() returns a Unix timestamp and a Unix timestamp is a fixed period of time: number of seconds since the Unix Epoch. It isn't affected by time zones.

Once you have the precise moment, you may want to calculate the local time in a given place:

<?php

$now = time();
echo $now . PHP_EOL;

date_default_timezone_set('Europe/Madrid');
echo date('r', $now) . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
echo date('r', $now) . PHP_EOL;

... will print different local dates for the same timestamp:

1313683738
Thu, 18 Aug 2011 18:08:58 +0200
Fri, 19 Aug 2011 01:08:58 +0900

The same reasoning applies for the opposite operation:

<?php

date_default_timezone_set('Europe/Madrid');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

... will print different timestamps:

978303330
978274530
难忘№最初的完美 2024-12-07 15:40:57

time() 获取 Unix 时间戳格式的操作系统时间。您可以使用 PHP 来纠正这个问题,但恕我直言,这应该是考虑在操作系统级别修复的问题。

time() gets the OS time in Unix Timestamp format. You could correct this with PHP but imho this should be something to consider fixing on OS level.

你另情深 2024-12-07 15:40:57

确保系统时间是最新的,或者在 PHP 中添加/减去: http ://www.php.net/manual/en/function.date.php#69221

Either make sure the system time is current, or add/subtract in PHP: http://www.php.net/manual/en/function.date.php#69221

深巷少女 2024-12-07 15:40:57

这不是“最佳”答案,但本地服务器时间可能被您的提供商管理不当。我不知道您使用时间信息的上下文,但每当我使用此类信息时,我都会尝试使用 UTD/GMT。如果您的用户分布在世界各地,甚至是一个国家,那么纠正时间可能是一场噩梦。可以使用 UDT/GMT 合理地表示文件保存时间、日志时间或其他用途等事物。

This won't be "the" answer, but the local server time can be mismanaged by your provider. I don't know the context for your use of the time information, but whenever I use such information, I attempt to use UTD/GMT. If your users are spread out over the world, or even a single country, rectifying time can be a nightmare. Representing things, like file save times, log times, or other uses can be done reasonably with UDT/GMT.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文