2009-08-14 10 views
10

Si Tengo una cadena de fecha:PHP Analizar la cadena de fecha

$date = "08/20/2009"; 

Y quiero separar cada parte de la fecha:

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

¿Cómo iba a hacerlo?

¿Existe una función de fecha especial que debería usar? ¿O algo mas?

Gracias!

Respuesta

14

explode va a hacer el truco para que:

Como alternativa, puede hacerlo en una línea (ver comentarios - gracias Lucky):

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

lista ($ m, $ d, $ y) = explode ("/", $ fecha); – Lucky

+0

@Lucky - gracias, editado. –

18

Una forma sería la de hacer esto :

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

ARGH! ¡Me ganaste! lol – Daniel

+1

Ah, pero su respuesta es más sólida. –

+4

Strtotime no siempre funciona debido a la restricción de la marca de tiempo. Supongamos que quiere analizar la Primera Guerra Mundial, no puede convertir 28/08/1914 en una marca de tiempo válida. –

2

¿Siempre es así? ¿O estará en algún tipo de formato de archivo?

Pruebe strtotime.

Algo así como:

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

respuesta de Dominic es bueno, pero SI la fecha es SIEMPRE en el mismo formato que podría utilizar esto:

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

y no tener que utilizar una matriz o explotar

Cuenta H

+0

¡Por favor, no! Piensa en el futuro lector de código :) – GiDo

+0

¿Por qué querría uno evitar explotar? * SI * la fecha es * SIEMPRE * en el mismo formato, explotar funcionará perfectamente, y como lo implica @GiDo, se auto documentará en términos de intención. Si uno quiere evitar la matriz, entonces 'list' los elementos a distintas variables. – Sepster

1

cómo sobre esto:

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

Una rápida un trazador de líneas.

6

Consulte PHP date_parse function. A menos que esté seguro de que la entrada siempre estará en un formato coherente, Y lo valida primero, es mucho más estable y flexible (por no mencionar más fácil), para que PHP intente analizar el formato por usted.

p. Ej.

<?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

Si tiene un formato dado, debe usar un objeto date.

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

Nota que sin duda puede usar sólo una llamada a DateTime::format().

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

Para el análisis sintáctico fecha internacionalizado, ver IntlDateFormatter :: parse - http://php.net/manual/en/intldateformatter.parse.php

Por ejemplo:

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