En este tutorial veremos como traducir y formatear de forma practica la fecha que nos proporciona la función date() de PHP.
La función date() de PHP nos sirve para mostrar la fecha actual (obtenida del ordenador del cliente), pero el problema es que esta solo se muestra en inglés, esto no es un problema si queremos que el formato de la fecha sea solo en numeros (10-11-2012), sin embargo en ocasiones queremos mostrarla de forma mas elaborada por ej: Sabado, 10 de Noviembre de 2012, es alli donde viene el problema.
Para solucionarlo vamos a usar un método que considero es el mas practico y seguro que funcione, lo que haremos sera guardar los valores en variables, pasarlos por una condición y por ultimo reemplazarlos por su valor traducido.
Dividimos cada elemento de la fecha y lo guardamos en variables:
$dia=date("l"); // Saturday
$mes=date("F"); // November
$ano=date("Y"); // 2012
En los comentarios esta lo que resultaria en cada caso (si no entiendes esos parámetros te recomiendo leas la documentación), ahora lo que haremos sera de acuerdo al resultado que obtengamos mediante una condición reemplazar ese valor de la variable:
$dia = date("l");
if ($dia == "Monday") $dia = "Lunes";
if ($dia == "Tuesday") $dia = "Martes";
if ($dia == "Wednesday") $dia = "Miércoles";
if ($dia == "Thursday") $dia = "Jueves";
if ($dia == "Friday") $dia = "Viernes";
if ($dia == "Saturday") $dia = "Sabado";
if ($dia == "Sunday") $dia = "Domingo";
$mes=date("F");
if ($mes == "January") $mes = "Enero";
if ($mes == "February") $mes = "Febrero";
if ($mes == "March") $mes = "Marzo";
if ($mes == "April") $mes = "Abril";
if ($mes == "May") $mes = "Mayo";
if ($mes == "June") $mes = "Junio";
if ($mes == "July") $mes = "Julio";
if ($mes == "August") $mes = "Agosto";
if ($mes == "September") $mes = "Setiembre";
if ($mes == "October") $mes = "Octubre";
if ($mes == "November") $mes = "Noviembre";
if ($mes == "December") $mes = "Diciembre";
$ano = date("Y");
Algo mas que añadir seria una variable mas a la cual llamaremos $dia2 esta almacenara el valor del dia pero en numeros y no sera traducida ya que no es necesario:
$dia2 = date("d");
Ya teniendo esto podemos armar nuestra fecha como nos plazca:
echo "$dia, $dia2 de $mes de $ano";
Lo que resultaria en:
Sábado, 10 de Noviembre de 2012
El mayor inconveniente que le veo a esta solución es el tamaño del código, por eso te recomendaria cuando lo uses guardarlo en un archivo aparte y llamarlo mediante un include o un require.
Porque no usar setlocale + strftime
El problema de usar este metodo es que setlocale utiliza un recurso del sistema operativo, el cual puede variar de acuerdo al OS que este usando el cliente, por consiguiente la funcion podria no funcionar siempre.
Espero te haya servido este pequeño tutorial, puedes bajarte el código fuente desde este enlace y no olvides que si tienes alguna pregunta o duda hazmela saber en los comentarios que con gusto te asistiré en lo que pueda.
Dryken dice
Gracias Josue por compartir conocimiento!!
Pablo dice
Mira muy bueno tu aporte… te anexo una forma mas corta de hacerlo…
Espero les sirva
Pablo dice
date_default_timezone_set(‘America/Lima’);
setlocale(LC_TIME, ‘spanish’);
$fecha=strftime(«%A, %d de %B de %Y»);
echo $fecha;
Josue Ochoa dice
El problema con setlocale es que no es seguro que funcione ya que depende del sistema operativo del cliente, por ejemplo acabo de hacer una prueba aqui donde tengo OS X en ingles y me sale la fecha: «Saturday, 10 de November de 2012». De todos modos gracias por poner el código, se me paso ponerlo como una alternativa en el tutorial.
Roger dice
Holas, bueno el tutorial, gracias. Una cosita, también es posible colocar en array, los dias y meses, sin necesidad de tantos condicionales. Saludos, nuevamente gracias por el aporte!
Alex Torres dice
Upppssss, no se ve el código, bueno aqui lo dejo de nuevo…
$dias = array(«Domingo»,»Lunes», «Mártes», «Miercoles», «Jueves», «Viernes», «Sabado»);
$meses =array(«»,»Enero», «Febrero», «Marzo», «Abril», «Mayo», «Junio», «Julio», «Agosto», «Septiembre», «Octubre», «Noviembre», «Diciembre»);
echo «Fecha actual: » . $dias[date(w)] . » » . date(d) . » del mes de » . $meses[date(n)] . » del año » . date(Y);
chao
giancarlos dice
hola jesus yo lo estado haciendo con un sitch case pero en mi caso no reconoce la funcion date_default_timezone_set(«America/lima»); para la zona horaria este es el source
function DiaEspañol()
{
date_default_timezone_set(«America/lima»);
$d=date(«l»,time());
switch( $d)
{
case «Monday «:
$dia = «Lunes»;
break;
case «Tuesday «:
$dia = «Martes»;
break;
case «Wednesday «:
$dia = «Miercoles»;
break;
case «Thursday «:
$dia = «Jueves»;
break;
case «Friday»:
$dia = «Viernes»;
break;
case «Saturday «:
$dia = «Sabado»;
break;
case «Sunday»:
$dia = «Domingo»;
break;
}
echo $dia;
}
DiaEspañol();
Alfredo Visitacion Medina dice
Perfecto… ya q no me funcionaba set_locale…
Gracias 😀