Github API, декодирование "дата" - PullRequest
2 голосов
/ 26 января 2012

Я использую API Github для получения моих последних коммитов, а возвращаемый формат даты выглядит следующим образом

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 ]

4 голосов
/ 26 января 2012

Это не может быть проще, чем это:

$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 для получения дополнительной информации.

1 голос
/ 26 января 2012

Простое, механическое решение состоит в том, чтобы полностью разбить дату:

$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 часовые пояса, в которых указана дата - может быть европейское, африканское или британское летнее время.

Это действительно зависит от того, что вы хотите сделать с данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...