我有一个脚本,应该告诉我在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);