我使用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等)?
答案 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时区 - 可能是欧洲,非洲或夏季的夏日时光。
这实际上取决于你想要对数据做什么。