查询Twitch API时,DateTime::diff返回的意外值


Unexpected value returned by DateTime::diff when querying Twitch API

我有一个脚本,应该告诉我在twitch上的某个流已经直播了多长时间。脚本工作,但我得到不正确的输出。也许我在时间格式上犯了一些错误?

我得到的created_at值看起来像2016-08-13T16:05:30Z,因此,如果我计算与今天($heute)的差异,我应该得到大约0天,6小时,13分钟,但我收到的输出是12 Tage(天),21 Stunden(小时),13分钟(分钟)。

例如,我使用这个JSON: https://api.twitch.tv/kraken/streams/lirik通过将$_GET['channel']设置为lirik

下面是我当前的代码:

$url = "https://api.twitch.tv/kraken/streams/" . $_GET['channel'];
$result = file_get_contents($url);
$result = json_decode($result, true);
  $creationdate = new DateTime(date('Y-m-d H:i:s',strtotime($result["created_at"])));
  $heute = new DateTime(date('Y-m-d H:i:s'));
  $diff = $creationdate->diff($heute);

  if($diff->d > 0) {
    $f = '%d Tage, %H Stunden, %i Minuten';
} elseif($diff->H > 0) {
    $f = '%H Stunden, %i Minuten';
} else {
    $f = '%i Minuten';
}
echo $diff->format($f);

如果没有设置$result["created_at"],则strtotime返回UNIX纪元(1970-01-01 00:00:00)。

从1970年1月1日午夜算起,现在是46年7个月12天21小时21分钟

这是因为API没有在数组的根返回created_at元素,它在stream子数组中。

如果启用了错误报告,这应该是显而易见的。您将得到一个Undefined index: created_at错误消息。然后可以使用var_dump($result);查看实际返回的内容。

你有一个进一步的错误:DateInterval没有H属性,它是h

$url = "https://api.twitch.tv/kraken/streams/" . $_GET['channel'];;
$result = file_get_contents($url);
$result = json_decode($result, true);
$creationdate = new DateTime($result["stream"]["created_at"]);
$heute = new DateTime();
$diff = $creationdate->diff($heute);
if($diff->d > 0) {
    $f = '%d Tage, %H Stunden, %i Minuten';
} elseif($diff->h > 0) {
    $f = '%H Stunden, %i Minuten';
} else {
    $f = '%i Minuten';
}
echo $diff->format($f);