我想创建一个计时器网站,因为我使用了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%并且没有任何错误。
答案 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";