【问题标题】:Github API, decode "date"Github API,解码“日期”
【发布时间】:2012-02-19 01:50:49
【问题描述】:

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

【问题讨论】:

标签: php date github-api


【解决方案1】:

没有比这更简单的了:

$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 了解更多信息。

【讨论】:

    【解决方案2】:

    简单、机械的解决方案是自己完全分解日期:

    $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 时区 - 可能是欧洲、非洲或英国夏令时。

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

    【讨论】:

    • 很高兴了解时区缩写。非常感谢!
    猜你喜欢
    • 2020-12-31
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2020-03-30
    • 2012-09-20
    • 2013-10-27
    • 2014-02-15
    相关资源
    最近更新 更多