【问题标题】:Removing an hour from PHP (FROM_UNIXTIME)从 PHP 中删除一个小时 (FROM_UNIXTIME)
【发布时间】:2011-07-30 10:08:55
【问题描述】:

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

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

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

【问题讨论】:

  • $timestamp - (60 * 60) 怎么样?
  • @netcoder 你的意思是$timestamp - 3600 :)?
  • @webarto:是的。只是我不喜欢幻数。 ;)

标签: php gmt unix-timestamp


【解决方案1】:

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'));

【讨论】:

  • strtotime('-1 hour', $timestamp);,他已经有了时间戳;)
  • 我当时想,他很快:)
  • @Buki:“UNIXTIME”没有已知的时区,它基于您的服务器配置。您是从数据库中提取时间还是向 PHP 索取?
  • @Buki 使用 gmdate 在 GMT 时区以秒为单位返回 unixtime:$timestamp = gmdate('U');
  • @Buki:好的,所以关于gmdate 和夏令时有一些要点,请检查我的编辑。
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 2014-07-22
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多