Github API,解码“日期”

时间:2012-01-25 20:56:52

标签: php date github-api

我使用Github的api来获取我的最新提交,返回的日期格式如下所示

2012-01-25T11:23:28-08:00

我试着这样做:

$date = explode('T', $next['commit']['author']['date']);
$time = strtotime($date[0] .' '. $date[1]);
$date = date('M j, Y  g:i a', $time);

但它没有成功,因为php认为我减去了8个小时(因为时区)。我想保留时区,但我不知道如何解析它。有没有人知道如何在时间正确的地方找到它并显示时区缩写(GMT,PST等)?

2 个答案:

答案 0 :(得分:4)

它不能比这更简单:

$a = new DateTime("2012-01-25T11:23:28-08:00");
echo $a->format("Y-m-d H:i:s");
//outputs 2012-01-25 11:23:28

有关详细信息,请参阅documentation of the DateTime class

答案 1 :(得分:1)

简单,机械的解决方案是完全打破日期:

$date = substr($next['commit']['author']['date'], 0, 10);
$time = substr($next['commit']['author']['date'], 11, 9);
$zone = substr($next['commit']['author']['date'], 20, 6);

list($y, $m, $d) = explode('-', $date);
list($h, $i, $s) = explode(':', $time);

$zh = substr($zone, 1, 2);
$zm = substr($zone, 4, 2);

if (substr($zone, 0, 1) == '-'){
  $h -= $zh;
  $m -= $zm;
}else{
  $h += $zh;
  $m += $zm;
}

$ts = gmmktime($h,$i,$s,$m,$d,$y);

这将为您提供UTC时间戳。

问题在于“显示时区缩写” - 您找不到给定偏移的缩写,因为可能有几个 - 您无法分辨出哪个例如日期所在的+01:00时区 - 可能是欧洲,非洲或夏季的夏日时光。

这实际上取决于你想要对数据做什么。