PHP - 日期时间错误从凌晨1点到凌晨1点

时间:2014-07-23 23:04:46

标签: php datetime diff

我想创建一个计时器网站,因为我使用了php的日期时间。 首先是我的代码,我如何使用datetime来计算从现在到目标日期之间的时间。

 $timezone = new DateTimeZone('Europe/Berlin');
 $now = new DateTime("now", $timezone); // aktuelle Uhrzeit/Datum
 $target_date = new DateTime($game_release["release_date"], $timezone);
 $interval = $now->diff($target_date);

现在就是这样。如果我想要我写的小时

$interval->h;

所以你应该看到我正确使用它。所有的计算都有效,但从凌晨0点到凌晨1点,我发现了一个错误。

显示-1小时!如果是凌晨1点(或更晚),则一切都很好。 -1小时的错误真的很奇怪......。

例如: 1年零2个月,没有错误! 1年零3个月,虫子。 1年零4个月,虫子。 1年零5个月,虫子。 1年零6个月,虫子。 1年零7个月,虫子。 8个月2天=错误 8个月22天=没有错误!

因为我的不好现在是凌晨1点,而且虫子已经消失了,一切正常。这真烦人......

任何人都可以帮我解决这个问题吗? 我真的认为这是一个日期时间错误......

我仍然认为这是一个错误,但对我来说它不再重要,如果我写了一个自己的计时器功能,它完全100%并且没有任何错误。

1 个答案:

答案 0 :(得分:0)

$ interval-> h只是为您提供部分细分。例如:

date_default_timezone_set('Europe/Berlin');
$interval = date_create('now')->diff(date_create("Jan 1 2014"));
print_r($interval);

返回

DateInterval Object
(
    [y] => 0
    [m] => 6
    [d] => 23
    [h] => 2
    [i] => 29
    [s] => 11
    [invert] => 1
    [days] => 204
)

这意味着差异为6个月,23天,2小时,2小时,29分钟和11秒(负)。或者它是204天(负)。如果您需要数小时,则需要计算或将此格式转换为小时。这可能会有点复杂,因为您需要确定日期之间每个月的天数。

我会说,使用unix时间戳会更容易,因为它们只需几秒钟,而且只需要60小时就可以了:

date_default_timezone_set('Europe/Berlin');
$today = time();
$targetdate = strtotime("Jan 1 2015");
echo (($targetdate-$today) /60);
echo " hours left";