2010-04-13 5 views
1

Ma solution était:En PHP étant donné une chaîne de date étendue, comment puis-je extraire le mois Année en format long?

$date = "Nov 30 2009 03:00:00:000PM"; 
echo date("F Y", strtotime($date)); 

Résultat attendu devrait être: "Novembre 2009"

Toutes les autres solutions simples?

+0

'03: 00: 00: 000PM' n'a pas de sens. Si vous corrigez la source de cette chaîne, à '03: 00: 00', je pense que' strtotime() 'fonctionnera. –

+2

Alors, quelle est la question, parce que le résultat est Novembre?!?! – TravisO

+0

Je ne peux pas contrôler la source du datetime retourné :( – stormist

Répondre

2

Alors qu'une regex pouvait le faire, voici quelque chose que vous pourriez comprendre plus facile

$date_bad = "Nov 30 2009 03:00:00:000PM"; 

$piece_date = array(); 
$piece_date = explode(' ', $date_bad); 
$date_good = $piece_date[0] .' '. $piece_date[1] .', '. $piece_date[2] .' '; 

$piece_time = array(); 
$piece_time = explode(':', $piece_date[3]); 

// check if the last part contains PM 
if (is_numeric(strpos($piece_time[3], 'PM'))) 
{ 
    $ampm = 'PM'; 
} 
// check if the last part contains AM 
elseif (is_numeric(strpos($piece_time[3], 'AM'))) 
{ 
    $ampm = 'AM'; 
} 
// no AM or PM is there, so it's a 24hr string 
else 
{ 
    $ampm = ''; 
} 

$date_good .= $piece_time[0] .':'. $piece_time[1] .':'. $piece_time[2] . $ampm; 

echo date("F", strtotime($date_good)); 
1
date_default_timezone_set ('Etc/GMT-6'); 
$unixtime = strtotime($date_bad); 
$date = date("F Y",$unixtime); 
echo $date; 

Time Zones

+0

get plus simple que strtotime! –

+0

L'exemple de la question utilisait déjà strtotime() et cela ne fonctionnait pas. – TravisO