Создайте строки PHP на время из XML - PullRequest
1 голос
/ 03 августа 2009

Я пытаюсь преобразовать следующий XML в Time:

 <time hour="18" minute="05" timezone="Eastern" utc-hour="-4" utc-minute="00" /> 

Я анализирую XML с использованием SimpleXML и сохраняю его в классе. Я также попытался распечатать следующее:

print strtotime($x->time->attributes()->hour . ":" . $x->time->attributes()->minute) . "<br>\n";

Результаты, полученные с этого отпечатка, выглядели примерно так:

1249254300

Я предполагаю, что ожидаемый результат будет либо 18: 05 , либо 6: 05 PM

Есть ли способ заставить его конвертировать в ожидаемый стиль? Кроме того, если бы я добавил часовой пояс в конец, есть ли способ, чтобы он это выяснил?

Ответы [ 3 ]

4 голосов
/ 03 августа 2009

Я бы посоветовал не использовать strtotime здесь. Вместо этого попробуйте mktime .

$time=mktime($x->time->attributes()->hour,$x->time->attributes()->minute,0,0,0,0)

Также вам нужно отформатировать отметку времени (то, что вы распечатали, было представлением Unix). Вы можете сделать это с помощью функции date .

date("H:i", $time);
1 голос
/ 03 августа 2009

Функция strToTime распознает дату или время в строковом формате, а затем преобразует их в метку времени Unix (количество секунд с начала эпохи Unix (эпоха Unix - 1 января 1970 года, полночь, UTC).

Итак, что вам нужно сделать, это воспользоваться функцией strToTime function, and use the <code>date, чтобы отформатировать их более читабельно

//24 hour clock
print date(
      'H:i',
      strtotime($x->time->attributes()->hour . ":" . $x->time->attributes()->minute) . "<br>\n");

//12 hour clock
print date(
      'h:i a',
      strtotime($x->time->attributes()->hour . ":" . $x->time->attributes()->minute) . "<br>\n");
</code>

Полные параметры форматирования можно найти запись даты на php.net

1 голос
/ 03 августа 2009

Вы можете привести его в форму strtotime () понимает (включая информацию о часовом поясе)

<?php
$x = new SimpleXMLElement('<x>
    <time hour="18" minute="05" timezone="Eastern" utc-hour="-4" utc-minute="00" />
</x>');

$ts = sprintf('%02d:%02d %+03d%02d', $x->time['hour'], $x->time['minute'], $x->time['utc-hour'], $x->time['utc-minute']);
$ts = strtotime($ts);
echo gmdate(DateTime::RFC1123, $ts), "\n", date(DateTime::RFC1123, $ts);

Мой местный часовой пояс CET / CEST (в данном случае utc + 2), поэтому сценарий печатает

Mon, 03 Aug 2009 22:05:00 +0000
Tue, 04 Aug 2009 00:05:00 +0200
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...