Foros del Web » Programando para Internet » PHP »

Función para mostrar fechas en Español

Estas en el tema de Función para mostrar fechas en Español en el foro de PHP en Foros del Web. Despues de haberme quitado tantas dudas Foros del Web, es hora de que aporte mi granito de arena; así que aca les mando una o ...
  #1 (permalink)  
Antiguo 18/05/2008, 14:51
 
Fecha de Ingreso: octubre-2006
Ubicación: Argentina Mendoza
Mensajes: 2
Antigüedad: 17 años, 6 meses
Puntos: 1
Función para mostrar fechas en Español

Despues de haberme quitado tantas dudas Foros del Web, es hora de que aporte mi granito de arena; así que aca les mando una o unas funciones para las fechas ya que siempre nos hacen falta para nuestros proyectos y a veces nunca le dedicamos
tiempo.

Una de las funciones nos puede servir para poder poner la fecha en cualquier formato al Español ya sea por mes, año y día.

Otra nos puede servir en caso de un Foro o un Blog para mostrar cuando se ha creado un articulo mostrando la fecha si el Articulo fue creado hoy nos saldría algo como esto: Articulo Hoy: 22:30 hs. Sí fue creado ayer nos saldría: Ayer 22:30 hs.
y por último si no es ni hoy ni ayer nos saldría esto: 05-10-08 22:30 hs.

También está incluida una función para decir cuando un Usuario cumple años, esta se utiliza sabiendo obviamente la fecha de nacimiento. Por ejemplo: Sí mi fecha de nacimiento es el 1979-03-05 (Formato en Ingles), La función de cumpleaños me escribiría que cumplo años el 05 de Marzo de, 2009.

Este es código de la primera Función que permite escribir una fecha en cualquier formato, por Ejemplo:

Sí queremos cambiar una fecha de la base de datos al Español sería así:

cambiar_fecha($sql[mi-fecha], "d-m-Y");

Paso a explicar: Le pasamos a la función el dato que queremos cambiar en este caso es desde la base de datos "mi-fecha" y después le decimos en que formato la queremos transformar. Esto imprimiría algo como esto 28-11-2008.

Sí queremos que también nos muestre la hora solo ponemos "H:i" que esto quiere decir H (mayúscula) horas e i (minúscula) minutos:

cambiar_fecha($sql[mi-fecha], "d-m-Y H:i");

Y sí queremos con más precisión, solo agregamos los segundos s (minúscula).

cambiar_fecha($sql[mi-fecha], "d-m-Y H:i:s");

Y sí queremos cambiar una fecha en Español que recogemos de un formulario y la queremos insertar en la base de datos ponemos la fecha en Ingles que sería:

cambiar_fecha($_POST['fecha'], "Y-m-d");

También de la misma manera que muestra los datos Hora y Minutos y Segundos se lo podemos agregar cuando recibimos la fecha del formulario.

//Hora que se subieron los datos del formulario

$hora = Date("H:i:s");

cambiar_fecha($_POST['fecha'], "Y-m-d $hora");


Otras funciones que se pueden hacer con esta función:

Mostrar sólo el año en 4 cifras: cambiar_fecha($sql[mi-fecha], "Y");

Mostrar sólo el año en 2 cifras: cambiar_fecha($sql[mi-fecha], "y");

Mostrar el Mes en número: cambiar_fecha($sql[mi-fecha], "m");

Mostrar el Mes con tres letras en Español: cambiar_fecha($sql[mi-fecha], "M");

Mostrar el Mes completo en Español: cambiar_fecha($sql[mi-fecha], "F");

Mostrar el día en númors: cambiar_fecha($sql[mi-fecha], "d");



El codigo fuente de esta función es:

//FUNCION PARA CAMBIAR FECHA
function cambiar_fecha($fecha, $formato){

$H="00"; $i="00"; $s="00"; $F=""; $M=""; $num_mes=0;

$Meses = array("","Enero","Febrero","Marzo","Abril","Mayo", "Junio","Julio",
"Agosto","Septiembre","Octubre","Noviembre","Dicie mbre");
$meses = array("","Ene","Feb","Mar","Abr","May","Jun","Jul" ,"Ago","Sep","Oct","Nov","Dic");

//Fecha recibida en ingles con hora
if(ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})", $fecha, $mifecha)){
$num_mes=$mifecha[2]; settype($num_mes, "integer");
$d=$mifecha[3]; $m=$mifecha[2]; $F=$Meses[$num_mes]; $M=$meses[$num_mes]; $Y=$mifecha[1];
$H=$mifecha[4]; $i=$mifecha[5]; $s=$mifecha[6];
}
//Fecha recibida en español con hora
elseif(ereg( "([0-9]{1,2})-([0-9]{1,2})-([0-9]{4}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})", $fecha, $mifecha)){
$num_mes=$mifecha[2]; settype($num_mes, "integer");
$d=$mifecha[1]; $m=$mifecha[2]; $F=$Meses[$num_mes]; $M=$meses[$num_mes]; $Y=$mifecha[3];
$H=$mifecha[4]; $i=$mifecha[5]; $s=$mifecha[6];
}
//Fecha recibida en ingles sin hora
elseif(ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha)){
$num_mes=$mifecha[2]; settype($num_mes, "integer");
$d=$mifecha[3]; $m=$mifecha[2]; $F=$Meses[$num_mes]; $M=$meses[$num_mes]; $Y=$mifecha[1];
}
//Fecha recibida en español sin hora
elseif(ereg( "([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})", $fecha, $mifecha)){
$num_mes=$mifecha[2]; settype($num_mes, "integer");
$d=$mifecha[1]; $m=$mifecha[2]; $F=$Meses[$num_mes]; $M=$meses[$num_mes]; $Y=$mifecha[3];
}

// Variable [y] ultimas dos cifras del año
$y = substr($Y, 2);

$formato = ereg_replace( "d", $d, $formato ); // [d] días
$formato = ereg_replace( "m", $m, $formato ); // [m] mes con numeros
$formato = ereg_replace( "Y", $Y, $formato ); // [Y] año de 4 cifras
$formato = ereg_replace( "y", $y, $formato ); // [y] año de 2 cifras
$formato = ereg_replace( "H", $H, $formato ); // [H] hora de 0 a 23
$formato = ereg_replace( "i", $i, $formato ); // [i] minutos de 0 a 59
$formato = ereg_replace( "s", $s, $formato ); // [s] segundos de 0 a 59
// Tienen que ir al final porque llevan texto para no ser reemplazado
$formato = ereg_replace( "M", $M, $formato ); // [M] mes con 3 letras
$formato = ereg_replace( "F", $F, $formato ); // [F] mes con letras completo

return $formato;
}



Bien ya sabemos la función de cambiar fecha ahora la siguiente función es para saber cuando fue enviado un dato. Como les dije anteriormente en el caso de un Foro o un Blog cuando creamos un articulo y mostrar la fecha que el articulo fue creado.

Esta función depende de la anterior y se llama Imprimir_fecha(). aquí les muestro un ejemplo como funcionaría:

Supongamos que tenemos una tabla en la Base de Datos (Mysql) 0que se llama Articulos_Blog y queremos mostrar la fecha que fué creado el articulo, para esto tendríamos que poner en la funcion imprimir_fecha() el dato de la tabla.

imprimir_fecha(Articulo['fecha_articulo']);

De esta manera la función va a imprimir si el articulo fué creado Hoy, Ayer o mostraría la fecha completa.

Código de la función imprimir_fehca():



//FUNCION IMRRIMIR FECHA
function imprimir_fecha($dato){

$fecha = cambiar_fecha($dato, "Y-m-d");
$hoy = date("Y-m-d");
$ayer_aprox = mktime(0,0,0,date("m") ,date("d")-1,date("Y"));
$ayer = date("Y-m-d", $ayer_aprox);

if($fecha == $hoy){ $fecha = "Hoy: ".cambiar_fecha($dato, "H:i");}

elseif($fecha == $ayer){ $fecha = "Ayer: ".cambiar_fecha($dato, "H:i");}

else{$fecha = cambiar_fecha($dato, "d-m-Y H:i");}

return $fecha;
}





Ahora otra función que muestra cuando un usuario cumple años:

Supongamos que tenemos en la Base de Datos (Mysql) la tabla Usuarios
y queremos saber cuando nuestros usuarios cumplen años tendríamos que hacer
la consulta a la Base de Datos:

//CONSULTA A USUARIOS

$query_Usuarios= mysql_query("SELECT * FROM usuario ORDER BY nombre DESC ");

//HACEMOS UNWHILE PARA MOSTRAR LOS DATOS

while($Usuario = mysql_fetch_array($query_Usuarios)){

echo "<p>Usuario: $Usuario['usuario']</p>";

echo "<p>Nombre: $Usuario['nombre']</p>";

echo "<p>Apellido: $Usuario['apellido']</p>";

//Y PARA MOSTRAR EL CUMPLEAÑOS USAMOS LA FUNCION cumpleano().

echo "<p>Cumpleaños: " .cumpleano($Usuario['fecha_nacimiento']). "años</p>";

}//FIN WHILE


Codigo de la funcion cumpleano:

//FUNCION CUMPLEAÑOS
function cumpleano($dato){

$mes = array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");

$fecha = split("[/.-]", $dato);

$d = $fecha[2];
$m = $fecha[1];
$y = $fecha[0];

for($i=1; $i <=12; $i++)
{
if($i == $m){ $mes=$mes[$i]; }
}

if(date("m") < $m){ $anio = date("Y");}

else{
$anio_aprox = mktime(0, 0, 0,date("m"), date("d"), date("Y")+1);
$anio = date("Y", $anio_aprox);}

return $cumpleano = $d." de ".$mes." de ".$anio;

}



Y por último esta función va de yapa! que es para saber cuantos años tienen nuestros Usuario:

Esta función es sumamente fácil lo único que hace es restar la fecha actual con la fecha de nacimiento de nuestros Usuarios.

El codigo es el siguiente:

//FUNCION EDAD
function edad($dato){

$edad = date('Y-m-d') - $dato;

return $edad;

}


Bueno estimados amigos... creo que esto es todo por ahora, cuando tenga un poco más de tiempo voy a seguir mandando más funciones que tengo guardaditas por ahí para mis trabajos.

Saludos a todos Charly!

www.descubramendoza.com
  #2 (permalink)  
Antiguo 18/05/2008, 20:10
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Función para mostrar fechas en Español

Hola Charly, bienvenido a FdW. Se agradece tu aporte, y te hago 2 comentarios:

1.- En el futuro, para que se vea más bonito y se mantenga el sangrado del código, usá las etiquetas [php ] y [/php ].

2.- Lo que pedís se puede arreglar de forma relativamente sencilla en PHP5, dando el valor correspondiente a date.timezone. En mi caso, por ejemplo

Código PHP:
ini_set('date.timezone''America/Montevideo'); 
Es suficiente para que las cadenas de fechas tengan los meses y días en español.

Igual se nota que lo has trabajado mucho, felicitaciones


Saludos.
  #3 (permalink)  
Antiguo 22/07/2008, 08:49
Avatar de gokufast  
Fecha de Ingreso: abril-2007
Mensajes: 540
Antigüedad: 17 años
Puntos: 3
Respuesta: Función para mostrar fechas en Español

acabo de leer este post, y queria saber donde poner el "ini_set('date.timezone', 'America/Montevideo');" , no hay que cambiar el php.ini?
  #4 (permalink)  
Antiguo 22/07/2008, 09:00
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Función para mostrar fechas en Español

podés cambiar el php.ini, o colocar eso como primera línea de tu programa.

igual creo que la mejor opción es usar date_default_timezone_set() en vez de ini_set('date.timezone'). (a pesar de ser yo quien sugirió la otra opción )


Saludos.
  #5 (permalink)  
Antiguo 22/07/2008, 09:09
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Función para mostrar fechas en Español

Aunque modifiques el timezone debes utilizar un array propio para poner la fecha en español no?? tan solo modificas la zona horaria, no el idioma

Podrias poner un ejemplo completo?
__________________
Francesc Jimenez
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:44.