@Brombomb
Votre fonction fonctionne très bien, mais il y a une chose que vous oublié. Horodatage peut être négatif pour les dates avant le 01.01.1970, nous avons donc besoin d'un autre regex
je celui-ci et il fonctionne très bien:
preg_match('/\/Date\((-?\d+)([+-]\d{4})\)/', $date, $matches);
A la fin i modifié votre fonction un peu à devenir plus utile pour moi. Maintenant, je peux décider si je reçois la date de retour comme
- "date" => seule date
- "temps" => temps que
- "datetime" => date et l'heure
- " tableau »=> date et l'heure comme un tableau
- « string »=> l'horodatage en tant que chaîne
et je peux décider si je veux la différence du fuseau horaire UTC ajouté/quand soustrait je donne le troisième paramètre ...
function parseJsonDate($date, $type = 'date', $utc = 0) {
// Match the time stamp (microtime) and the timezone offset (may be + or -) and also negative Timestamps
preg_match('/\/Date\((-?\d+)([+-]\d{4})\)/', $date, $matches);
$seconds = $matches[1]/1000; // microseconds to seconds
$UTCSec = $matches[2]/100*60*60; // utc timezone difference in seconds
if($utc != 0){
$seconds = $seconds + $UTCSec; // add or divide the utc timezone difference
}
$date = date('Y-m-d', $seconds); // only date
$dateTime = date('Y-m-d H:i:s', $seconds); // date and time
$time = date('H:i:s', $seconds); // only time
switch($type)
{
case 'date':
return $date; // returns 'YYYY-MM-DD'
break;
case 'datetime':
return $dateTime; // returns 'YYYY-MM-DD HH:ii:ss'
break;
case 'time':
return $time; // returns 'HH:ii:ss'
break;
case 'array':
$dateArray = str_replace(" ", "-", $dateTime);
$dateArray = str_replace(":", "-", $dateArray);
return explode('-', $dateArray); // return array('YYYY', 'MM', 'DD', 'HH', 'ii', 'SS')
break;
case 'string':
return $matches[1] . $matches[2]; // returns 1336197600000-0600
break;
}
}
Est-ce le 04-12-1982 par hasard, et non le 02-15-1982? – hookedonwinter
En utilisant la solution d'AinStain (qui est nécessaire si les dates sont négatives (avant 1970) cette date semble être 1982-04-13 –