2009-08-14 21 views
10

Se ho una stringa di data:PHP Parse Data String

$date = "08/20/2009"; 

E voglio separare ogni parte della data:

$m = "08"; 
$d = "20"; 
$y = "2009"; 

Come avrei fatto così?

C'è una funzione di data speciale che dovrei usare? O qualcos'altro?

Grazie!

risposta

14

explode farà il trucco per questo:

In alternativa, si potrebbe fare in una linea (vedi commenti - grazie fortunato):

list($m, $d, $y) = explode("/", $date); 
+5

list ($ m, $ d, $ y) = explode ("/", $ data); – Lucky

+0

@Lucky - grazie, modificato in. –

18

Un modo potrebbe essere quello di fare questo :

$time = strtotime($date); 
$m = date('m', $time); 
$d = date('d', $time); 
$y = date('Y', $time); 
+0

ARGH! Mi hai battuto sul tempo! lol – Daniel

+1

Ah, ma la tua risposta è più solida. –

+4

Strtotime non funziona sempre a causa del vincolo di timestamp. Supponete di voler analizzare World War I, non è possibile convertire 28/08/1914 in un timestamp valido. –

2

È sempre così? O sarà in qualsiasi tipo di formato di file?

Prova strtotime.

Qualcosa di simile:

if(($iTime = strtotime($strDate))!==false) 
{ 
echo date('m', $iTime); 
echo date('d', $iTime); 
echo date('y', $iTime); 
} 
-3

risposta di Dominic è buono, ma SE la data è SEMPRE nello stesso formato è possibile utilizzare questo:

$m = substr($date,0,2); 
$d = substr($date,3,2); 
$y = substr($date,-4); 

e non è necessario utilizzare un array o esplodere

Bill H

+0

Per favore, no! Pensa al futuro lettore di codice :) – GiDo

+0

Perché si dovrebbe evitare di esplodere? * SE * la data è * SEMPRE * nello stesso formato, esploderà perfettamente, e come implica @GiDo, sarà auto-documentante in termini di intenti. Se si vuole evitare l'array, quindi 'elenca' gli elementi in variabili distinte. – Sepster

1

come su questo:

list($m, $d, $y) = explode("/", $date); 

Un rapido uno di linea.

6

Verificare PHP date_parse function. A meno che tu non sia sicuro che l'input sarà sempre in un formato coerente, E prima lo convaliderai, sarà molto più stabile e flessibile, (per non dire più semplice), per consentire a PHP di provare ad analizzare il formato per te.

ad es.

<?php 
//Both inputs should return the same Month-Day-Year 
print_r(date_parse("2012-1-12 51:00:00.5")); 
print_r(date_parse("1/12/2012")); 
?> 
3

Se si dispone di un determinato formato, è necessario utilizzare un oggetto date.

$date = DateTime::createFromFormat('m/d/Y', '08/20/2009'); 
$m = $date->format('m'); 
$d = $date->format('d'); 
$y = $date->format('Y'); 

Nota si può certamente utilizzare una sola chiamata a DateTime::format().

$newFormat = $date->format('d-m-Y'); 
0

Per data internazionalizzato analisi, vedere IntlDateFormatter :: parse - http://php.net/manual/en/intldateformatter.parse.php

Ad esempio:

$f = new \IntlDateFormatter('en_gb', \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE); 
$dt = new \DateTime(); 
$dt->setTimestamp($f->parse('1/2/2015'));