Удаление часа из PHP (FROM_UNIXTIME) - PullRequest
1 голос
/ 06 апреля 2011

Не могли бы вы посоветовать, как удалить час из unixtime.

У меня есть unixtime, и мне нужно удалить дополнительный час перед преобразованием в обычное время.Не могли бы вы посоветовать, как это сделать?

Кроме того, на время Unixtime влияют изменения времени по Гринвичу?

1 Ответ

5 голосов
/ 06 апреля 2011

метки времени 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 может включать летнее время (DST), а функции даты «GMT» в PHP фактически возвращают время UTC, которое не имеет понятия о летнем времени.,К счастью, вы можете определить, является ли это летним временем, используя PHP, и в основном соответствующим образом скорректировать.

Получить время UTC, используя gmdate:

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

Определить, является ли это летним временем, используя I:

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

gmdate('U') будет отводить время по Гринвичу во время летнего времени на час, поэтому вам нужно дать ему +3600 секунд или 1 час, когда наступает летнее время, так что сложите это вместе:

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