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

时间:2016-08-13 20:20:48

标签: php

我有一个脚本,可以告诉我twitch上的某个流已经存在了多长时间。该脚本有效,但输出错误。也许我在时间格式上犯了一些错误?

我得到的created_at值看起来像2016-08-13T16:05:30Z, 所以,如果我计算今天的差异($heute),我应该在0天,6小时,13分钟左右,但我收到的输出是12 Tage(Days),21 Stunden(Hours),13 Minuten(Minutes)

例如,我通过将$_GET['channel']设置为lirik来使用此JSON:https://api.twitch.tv/kraken/streams/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);

1 个答案:

答案 0 :(得分:1)

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

自1970年1月1日午夜起,目前为46年,7个月,<强> 12天,21小时,21分钟。

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

如果启用错误报告,这应该是显而易见的。您将收到未定义索引: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);