2009-08-02 11 views
1

Ich versuche, die folgende XML in eine Zeit zu konvertieren:Baukonstruktion PHP-Strings zu Zeit von XML

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

ich die XML bin Parsen SimpleXML verwenden und zu speichern, dass in einer Klasse. Ich habe auch versucht die folgenden Ausdrucken:

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

Die Ergebnisse, die ich von diesem Druck hat etwas so aussah:

1249254300 

ich das Ergebnis denke ich erwarte wäre entweder 18.05 oder 6:05 PM

Gibt es irgendeine Weise, die ich es erhalten kann, um zu dem Stil zu konvertieren, den ich erwarte? Auch wenn ich die Zeitzone am Ende hinzufügen würde, gibt es eine Möglichkeit, das herauszufinden?

Antwort

4

Ich würde hier von strtotime abraten. Versuchen Sie stattdessen mktime.

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

Auch Sie müssen den Zeitstempel formatieren (was Sie ausgedruckt haben, war die Unix-Darstellung). Sie können dies mit der date Funktion tun.

date("H:i", $time); 
1

Sie können es in eine Form bringen strtotime() versteht (einschließlich der Zeitzone Info)

<?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); 

Meine lokale Zeitzone MEZ/MESZ (GMT + 2 in diesem Fall), deshalb werden die Skript druckt

Mon, 03 Aug 2009 22:05:00 +0000 
Tue, 04 Aug 2009 00:05:00 +0200 
1

die strToTime Funktion wird ein Datum oder Zeit im String-Format, erkennen und wandelt sie dann in einem Unix-Zeitstempel (die Anzahl der Sekunden seit der Unix Epoc h (die Unix-Epoche ist der 1. Januar 1970 um Mitternacht, UTC).

Also, was Sie tun müssen, ist die Resul Ihrer strToTime function, and use the date Funktion nehmen sie in einer für Menschen lesbaren Art und Weise zu formatieren

//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"); 

Vollformatierungsoptionen gefunden werden kann the date entry on php.net