2010-06-16 10 views
1

J'utilise PHP pour obtenir du XML à partir d'une API (disons 3 fois rapidement). Je récupère toutes les chaînes correctes de toutes les données. Le problème vient quand j'essaye de reformater la chaîne de temps avec les deux méthodes suivantes:La chaîne de l'élément PHP DOM rompt avec strtotime() ou preg_replace()

$dataset = $xmlDoc->getElementsByTagName("Class"); 

foreach($dataset as $row) { 

    $xmlStartTimes = $row->getElementsByTagName("StartTime"); 
    $xmlStartTime = $xmlStartTimes->item(0)->nodeValue; 

    echo $xmlStartTime; // Gives eg. 12/30/1899 6:15:00 PM 

    // Convert Time to 24H 

    // Attempt 1: 

    $cleanStartTime = preg_match('^12/30/1899 (0[1-9]|1[0-2]):(0[1-9]|[1-5][0-9]):([00]) (AM|PM|pm|am)$', $xmlStartTime, $matches); 

    print_r($matches); // Gives empty array 

    // Attempt 2: 

    $cleanStartTime = date("H:i", strtotime("$xmlStartTime")); 

    echo $cleanStartTime // Gives 1:00 

} 

Merci d'avoir jeté un oeil.

+0

'var_dump ($ xmlStatrTime)' est-ce une chaîne ou SimpleXmlElement? –

Répondre

1

Ces durées sont en dehors de la plage d'horodatage UNIX (32 bits). Utilisez l'extension DateTime à la place:

<?php 
$a = new DateTime("12/30/1899 6:15:00 PM"); 
echo $a->format("H:i"); 

donne 18:15.

+0

'date d'impression (" H: i ", strtotime ('12/30/1899 6:15:00 PM '));' montre 18h15, encore un bon conseil néanmoins. –

+0

Génial, je pensais que la date donnée par l'API pouvait avoir causé des effets étranges. – Ben

+0

@Mike B Pas sur les plates-formes avec des int 32 bits. Sur les fenêtres, votre ligne me donne '01: 00'. – Artefacto