2010-09-06 19 views
7

Si tengo una cadena que representa una fecha, como "2011/07/01" (que es el 1 de julio de 2011), ¿cómo la generaría en formas más legibles, como:Dar formato a una cadena de fecha en PHP

1 July 2011 
1 Jul 2011 (month as three letters) 

y también, ¿cómo podría hacer que se muestre de forma inteligente los intervalos de fechas como "2011/07/01" a "2011/07/11" como

1 - 11 July 2001 

(sin repetir el 'julio' y '2011 'en este caso)

Respuesta

16

Como se mencionó NullUserException, puede utilizar strtotime para convertir la fecha cadenas de sellos de tiempo Puede rangos de salida 'inteligente' mediante el uso de un formato de fecha diferente para la primera fecha, se determina comparando las años, meses y días:

$date1 = "2011/07/01"; 
$date2 = "2011/07/11"; 

$t1 = strtotime($date1); 
$t2 = strtotime($date2); 

// get date and time information from timestamps 
$d1 = getdate($t1); 
$d2 = getdate($t2); 

// three possible formats for the first date 
$long = "j F Y"; 
$medium = "j F"; 
$short = "j"; 

// decide which format to use 
if ($d1["year"] != $d2["year"]) { 
    $first_format = $long; 
} elseif ($d1["mon"] != $d2["mon"]) { 
    $first_format = $medium; 
} else { 
    $first_format = $short; 
} 

printf("%s - %s\n", date($first_format, $t1), date($long, $t2)); 
+0

Grande, Gracias. Solución perfecta. – cannyboy

17

Puede convertir su fecha en una marca de tiempo usando strtotime() y luego use date() en esa marca de tiempo. En su ejemplo:

$date = date("j F Y", strtotime("2011/07/01")); // 1 July 2011 
$date = date("j M Y", strtotime("2011/07/01")); // 1 Jul 2011 
1

En cuanto a la segunda:

$time1 = time(); 
$time2 = $time1 + 345600; // 4 days 
if(date("j",$time1) != date("j",$time2) && date("FY",$time1) == date("FY",$time2)){ 
    echo date("j",$time1)." - ".date("j F Y",$time2); 
} 

Can be seen in action here

Sólo constituyen más condiciones

1

me gustaría utilizar strtotimeYstrftime. Es una forma mucho más simple de hacerlo.

Por ejemplo, si una tiene una cadena de fecha como "Oct 20 18:29:50 GMT 2001" y quiero conseguirlo en formato día/mes/año lo que podía hacer:

$mystring = "Oct 20 18:29:50 2001 GMT"; 
printf("Original string: %s\n", $mystring); 
$newstring = strftime("%d/%m/%Y", strtotime($mystring)); 
printf("Data in format day/month/year is: %s\n", $newstring); 
Cuestiones relacionadas