Foros del Web » Programando para Internet » PHP »

ayuda !..... dar formato a fecha..

Estas en el tema de ayuda !..... dar formato a fecha.. en el foro de PHP en Foros del Web. hola a todos. necesito me ayuden con esto... un campo de mi bd, almacena un texto con el siguiente tipo de dato "012002-032003"... que es ...
  #1 (permalink)  
Antiguo 25/07/2009, 23:55
 
Fecha de Ingreso: diciembre-2008
Mensajes: 268
Antigüedad: 15 años, 11 meses
Puntos: 0
Pregunta ayuda !..... dar formato a fecha..

hola a todos.
necesito me ayuden con esto...
un campo de mi bd, almacena un texto con el siguiente tipo de dato
"012002-032003"... que es el resultado de una union de fechas, es decir...
para este caso...

01 (enero) 2002 (año) - 03 (marzo) 2003 (año)...

lo que quiero ahora es precisamente "transformar" ese string de "012002-032003" a "Ene.02-Mar.03".... es posible ???

espero me ayuden

GRACIAS !!
  #2 (permalink)  
Antiguo 26/07/2009, 00:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: ayuda !..... dar formato a fecha..

Vas a tener que usar explode() y luego strtotime() y luego date()
  #3 (permalink)  
Antiguo 26/07/2009, 04:19
 
Fecha de Ingreso: julio-2009
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: ayuda !..... dar formato a fecha..

si se puede, aqui te dejo un ejemplo funcional para que lo uses o lo tomes como referencia.




Código PHP:
<?

function cambiar_formato_fecha($fecha)
{

$fechas=explode("-"$fecha); //separamos las dos fechas

    
$meses[0]=str_split($fechas[0], 2);//obtenemos el mes de la primera fecha
    
$meses[1]=str_split($fechas[1], 2); //obtenemos el mes de la segunda fecha

//str_split va separar en un array, la fecha cada 2 caracteres
//los primero dos caracteres va a ser el numero del mes y los otros dos pares van a ser el año

$mes1=$meses[0][0]; //asignamos el valor del primer mes, a la variable $mes1 para no estar usando arrays
$ano1=$meses[0][1].=$meses[0][2];//asignamos a $ano1 el valor del primer año, juntando los dos pares del array

$mes2=$meses[1][0]; //mismo paso que arriba, pero para la seguna fecha
$ano2=$meses[1][1].=$meses[1][2]; //lo mismo de arriba.

//como las fechas las vas a poner en español no se puede usar date()
// asi que con un switch cambiamos el numero del mes por su abreviacion en español 


switch($mes1)
{
    case 
"01":
        
$mes1="Ene";
        break;
    case 
"02":
        
$mes1="Feb";
        break;
    case 
"03":
        
$mes1="Mar";
        break;
    case 
"04":
        
$mes1="Abr";
        break;
    case 
"05":
        
$mes1="May";
        break;
    case 
"06":
        
$mes1="Jun";
        break;
    case 
"07":
        
$mes1="Jul";
        break;
    case 
"08":
        
$mes1="Ago";
        break;
    case 
"09":
        
$mes1="Sep";
        break;
    case 
"10":
        
$mes1="Oct";
        break;
    case 
"11":
        
$mes1="Nov";
        break;
    case 
"12":
        
$mes1="Dic";
        break;
}

// lo mismo pero para el segundo mes

switch($mes2)
{
    case 
"01":
        
$mes2="Ene";
        break;
    case 
"02":
        
$mes2="Feb";
        break;
    case 
"03":
        
$mes2="Mar";
        break;
    case 
"04":
        
$mes2="Abr";
        break;
    case 
"05":
        
$mes2="May";
        break;
    case 
"06":
        
$mes2="Jun";
        break;
    case 
"07":
        
$mes2="Jul";
        break;
    case 
"08":
        
$mes2="Ago";
        break;
    case 
"09":
        
$mes2="Sep";
        break;
    case 
"10":
        
$mes2="Oct";
        break;
    case 
"11":
        
$mes2="Nov";
        break;
    case 
"12":
        
$mes2="Dic";
        break;
}

//creamos la nueva fecha en el formato deseado

$fecha_nueva="$mes1.$ano1-$mes2.$ano2";

//la regresamos
return $fecha_nueva;

}




//cada ves que se le entrege una fecha, la regresara en el formato nuevo
//en este caso introducimos 012002-032003 y nos regresa Ene.2002-Mar.2003 
//pon la funcion en un loop para que se encarge de cambiar todas las fechas

$fecha_vieja="012002-032003";
$fecha=cambiar_formato_fecha($fecha_vieja);

echo 
$fecha//comprobamos que si haya servido xD


?>
  #4 (permalink)  
Antiguo 26/07/2009, 08:14
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: ayuda !..... dar formato a fecha..

Siempre es mejor trabajar con timestamp

Código PHP:
Ver original
  1. $d = "012002-032003";
  2. preg_match_all("|\d|",$d,$m);
  3. $d1 = date("M/Y", strtotime($m[0][0].$m[0][1]."/01/".$m[0][2].$m[0][3].$m[0][4].$m[0][5]));
  4. $d2 = date("M/Y", strtotime($m[0][6].$m[0][7]."/01/".$m[0][8].$m[0][9].$m[0][10].$m[0][11]));
  5. echo $d1."<br />";
  6. echo $d2;
  #5 (permalink)  
Antiguo 26/07/2009, 08:57
 
Fecha de Ingreso: julio-2009
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: ayuda !..... dar formato a fecha..

el problema con date es que solo da las abreviaciones en ingles.
  #6 (permalink)  
Antiguo 26/07/2009, 09:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: ayuda !..... dar formato a fecha..

Entonces lo puede hacer así

Código PHP:
Ver original
  1. <?php
  2. setlocale(LC_ALL,"es_ES@euro","es_ES","esp");
  3. $d = "012002-032003";
  4. preg_match_all("|\d|",$d,$m);
  5. $d1 = strftime("%b/%Y", strtotime($m[0][0].$m[0][1]."/01/".$m[0][2].$m[0][3].$m[0][4].$m[0][5]));
  6. $d2 = strftime("%b/%Y", strtotime($m[0][6].$m[0][7]."/01/".$m[0][8].$m[0][9].$m[0][10].$m[0][11]));
  7. echo $d1."<br />";
  8. echo $d2;
  9. ?>
  #7 (permalink)  
Antiguo 26/07/2009, 09:16
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: ayuda !..... dar formato a fecha..

Exelente Abimaelrc.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:12.