从 PHP 中删除一个小时 (FROM_UNIXTIME)

发布于 2024-10-30 18:49:30 字数 128 浏览 0 评论 0原文

请您建议如何从 unixtime 中删除一个小时。

我有一个unixtime,我需要在转换为正常时间之前删除一个额外的小时。您能建议如何做到这一点吗?

另外,Unixtime 是否受到 GMT 时间变化的影响?

Could you please advice how to remove an hour from unixtime.

I have a unixtime and i need to remove an extra hour before converting to normal time. Could you please advice how to do this?

Also, is Unixtime affected by the GMT time changes?

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

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

发布评论

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

评论(1

懒的傷心 2024-11-06 18:49:30

Unix时间戳以秒为单位,一小时有3600秒(60分钟,每60秒=60*60=3600),所以只需减去:

$timestamp = time();
$timestamp_less_one_hour = $timestamp - 3600;

您也可以使用 strtotime 来完成相同的任务:

$timestamp_less_one_hour = strtotime('-1 hour', $timestamp);

或者如果 $timestamp 只是“现在”,你可以调用strtotime 没有第二个参数:

$timestamp_less_one_hour = strtotime('-1 hour'); // time() - 1 hour

所以你似乎在寻找 GMT 时间,问题是 GMT 可以包括夏令时 (DST),而 PHP 中的“GMT”日期函数实际上返回 UTC 时间,没有 DST 的概念。幸运的是,您可以使用 PHP 检测是否是夏令时,并基本上进行适当调整。

使用 gmdate 获取 UTC 时间:

$utc_time = gmdate('U'); // return Unix seconds in UTC timezone

使用 I

$is_dst = gmdate('I'); // 1 when it's DST, 0 otherwise

gmdate('U') 在 DST 期间会落后 GMT 时间一个小时,因此您需要给它 +3600 秒,或者在 DST 时为 1 小时,所以把这个 一起:

$gmt_time = gmdate('U') + (3600*gmdate('I'));

Unix timestamps are measured in seconds, there are 3600 seconds in an hour (60 minutes, each with 60 seconds = 60*60 = 3600), so just subtract:

$timestamp = time();
$timestamp_less_one_hour = $timestamp - 3600;

You can also use strtotime to accomplish the same:

$timestamp_less_one_hour = strtotime('-1 hour', $timestamp);

Or if $timestamp is simply "now" you can call strtotime without the second parameter:

$timestamp_less_one_hour = strtotime('-1 hour'); // time() - 1 hour

So you seem to be looking for GMT time instead, the trouble is GMT can include Daylight Savings Time (DST), and the "GMT" date functions in PHP actually return UTC time, which has no concept of DST. Luckily you can detect if it's DST using PHP, and basically adjust appropriately.

Get UTC time using gmdate:

$utc_time = gmdate('U'); // return Unix seconds in UTC timezone

Detect if it's DST using I:

$is_dst = gmdate('I'); // 1 when it's DST, 0 otherwise

gmdate('U') will trail GMT time during DST by an hour, thus you need to give it +3600 seconds, or 1 hour when it's DST, so putting this together:

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