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 に答える