2009-08-02 8 views
1

Je suis en train de convertir le code XML suivant en temps:Construct chaînes PHP en temps de XML

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

Je suis analyse syntaxique du XML à l'aide SimpleXML, et le stockage que dans une classe. J'ai aussi essayé imprimer les éléments suivants:

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

Les résultats que j'ai obtenu de cette impression regardé quelque chose comme ceci:

1249254300 

Je suppose que le résultat que je me attends serait soit 18h05 ou 6:05 PM

Y at-il un moyen de le convertir au style que j'attends? De plus, si je devais ajouter le fuseau horaire à la fin, y a-t-il un moyen de le comprendre?

Répondre

4

Je déconseille d'utiliser strtotime ici. Au lieu de cela, essayez mktime.

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

Vous devez également formater l'horodatage (ce que vous avez imprimé était la représentation unix). Vous pouvez le faire avec la fonction date.

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

Vous pouvez le mettre en forme strtotime() comprend (y compris les informations de fuseau horaire)

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

Mon fuseau horaire local est CET/CEST (GMT + 2 dans ce cas), donc les impressions de script

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

la fonction strToTime reconnaîtra une date ou l'heure sous forme de chaîne, puis le convertir en un timestamp Unix (le nombre de secondes depuis le Epoc Unix h (l'époque Unix étant le 1er janvier 1970 à minuit, UTC).

Alors, ce que vous devez faire est de prendre la resul de votre fonction strToTime function, and use the date pour les mettre en forme de manière plus lisible humaine

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

options de formatage complètes peuvent être trouvées the date entry on php.net