2

我使用 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 等)?

4

2 回答 2

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

有关详细信息,请参阅DateTime 类的文档

于 2012-01-25T21:17:33.223 回答
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 时区中的哪个-可以是欧洲、非洲或英国的夏季时间。

这真的取决于你想对数据做什么。

于 2012-01-25T21:10:20.307 回答