2010-02-08 16 views

risposta

20

Per PHP 5.3 questa dovrebbe funzionare. Potresti aver bisogno di trafficare con il passare $ dateInfo ['is_dst'], comunque non funzionava per me.

$date = '05/Feb/2010:14:00:01'; 
$dateInfo = date_parse_from_format('d/M/Y:H:i:s', $date); 
$unixTimestamp = mktime(
    $dateInfo['hour'], $dateInfo['minute'], $dateInfo['second'], 
    $dateInfo['month'], $dateInfo['day'], $dateInfo['year'], 
    $dateInfo['is_dst'] 
); 

Le versioni precedenti, questo dovrebbe funzionare.

$date = '05/Feb/2010:14:00:01'; 
$format = '@^(?P<day>\d{2})/(?P<month>[A-Z][a-z]{2})/(?P<year>\d{4}):(?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})[email protected]'; 
preg_match($format, $date, $dateInfo); 
$unixTimestamp = mktime(
    $dateInfo['hour'], $dateInfo['minute'], $dateInfo['second'], 
    date('n', strtotime($dateInfo['month'])), $dateInfo['day'], $dateInfo['year'], 
    date('I') 
); 

Potrebbe non piacervi le espressioni regolari. Potresti annotare, ovviamente, ma non piace a nessuno. Quindi, questa è un'alternativa.

$day = $date[0].$date[1]; 
$month = date('n', strtotime($date[3].$date[4].$date[5])); 
$year = $date[7].$date[8].$date[9].$date[10]; 
$hour = $date[12].$date[13]; 
$minute = $date[15].$date[16]; 
$second = $date[18].$date[19]; 

Oppure substr, o esplode, qualunque cosa si voglia analizzare la stringa.

+0

Non funziona affatto. Dice date_parse_from_format non è definito. –

+0

@xcoder, rileggi la mia risposta per favore. – erisco

4

Si dovrebbe esaminare il strtotime() function.

+0

Ho cercato ma non posso farlo funzionare – streetparade

+0

La tua stringa potrebbe non essere compatibile con strtotime(); potrebbe essere necessario formattarlo un po 'prima. –

52

Utilizzare la funzione strtotime:

Esempio:

$date = "25 december 2009"; 
$my_date = date('m/d/y', strtotime($date)); 
echo $my_date; 
+0

Non vedo alcun formato supportato da strtotime nel manuale – streetparade

+0

@streetparade: intendo ad esempio non è possibile passare ad esso tutti i tipi di stringhe per la data es. "28 del dicembre duemiladieci" – Sarfraz

+0

Vale la pena notare che strtotime supporta anche parole chiave e frasi come "ieri" o "questo giorno la prossima settimana"; p – Rowan

1

semplice esplosione dovrebbe fare il trucco:

$monthNamesToInt = array('Jan'=>1,'Feb'=>2, 'Mar'=>3 /*, [...]*/); 
$datetime = '05/Feb/2010:14:00:01'; 
list($date,$hour,$minute,$second) = explode(':',$datetime); 
list($day,$month,$year) = explode('/',$date); 

$unixtime = mktime((int)$hour, (int)$minute, (int)$second, $monthNamesToInt[$month], (int)$day, (int)$year); 
0

Prova questo:

$new_date=date('d-m-Y', strtotime($date)); 
+0

Questo è downvoted a causa della ridondanza. La risposta è corretta, ma è stata fornita in precedenza l'8 febbraio da Sarfraz. Il problema –

2
$d="05/Feb/2010:14:00:01"; 
$dr= date_create_from_format('d/M/Y:H:i:s', $d); 
echo $dr->format('Y-m-d H:i:s'); 

qui si ottiene stringa di date, indicare lo specificatore di formato in -> format() in base al formato richiesto

0

Se si tratta di una stringa di cui si ha fiducia nel significato che si è verificata in precedenza, anche il seguente potrebbe funzionare.

$date = new DateTime('2015-03-27'); 
+0

con DateTime è quello che convertirà il fuso orario. – Roninio

Problemi correlati