Поведение <? Php echo date ("H: i: s", 0);?> - PullRequest
3 голосов
/ 07 декабря 2010

Я использовал:

<?php 
echo date("H:i:s", $var_time_diff);
?>

, чтобы построить время между двумя датами ... и в моей голове это было
$var_time_diff = 36000 = display 10:00:00 for 10 hours.

Но на самом деле

<?php echo date("H:i:s", 0);?> 

дисплей 01:00:00 а не 00:00:00.

Итак, у нас есть

$date_a = "18:15:04";
$date_b = "23:15:04";
$diff = strtotime($date_b) - strtotime($date_a);

На данный момент все в порядке $diff это 5 часов, но если мы отображаем датунапример:

echo date("H:i:s", $diff);

это будет "06:00:00".

Так что-то не так с моей конфигурацией php или это нормальное поведение для даты функции php?

Ответы [ 4 ]

5 голосов
/ 07 декабря 2010

Функция date() использует ваш текущий часовой пояс. Если вы хотите игнорировать настроенный часовой пояс, используйте date_default_timezone_set() или gmdate().

2 голосов
/ 07 декабря 2010

Вы находитесь в другом часовом поясе, кроме UTC Попробуйте:

<?php
date_default_timezone_set('UTC');
echo date("H:i:s",0) . "\n";
0 голосов
/ 07 декабря 2010

используйте mktime и мин 1 для часа @ $ diff

0 голосов
/ 07 декабря 2010

Я не уверен, почему, но date выводит текущий час в вашем примере, сначала сделайте метку времени из ваших секунд, и это работает. Я буду следовать этому вопросу для более глубокого объяснения.

$date_a = "18:15:04";
$date_b = "23:15:04";
$diff = strtotime($date_b) - strtotime($date_a);
echo date("H:i:s", mktime(0,0,$diff));

edit: ах, поэтому он подстраивается под ваш текущий часовой пояс, как и mktime, поэтому эффект отменяется.

...