Que tal queridos lectores hoy es viernes y hoy toca, si hoy toca un pequeño tutorial donde hablare acerca de como poner las fechas en español cuando trabajamos con PHP, existen muchas formas de hacerlo, que si con una función, que con arrays, que set_locale, por mencionar algunas de las muchas formas con las que podemos realizar nuestro objetivo, obviamente todo depende del nivel de conocimiento que se tenga en PHP buscaremos la forma más fácil para nosotros de implementar nuestros scripts.
Empezare a hablar acerca de este tema tomando como entendido que ya tienen conocimiento básico de PHP y de la Función Date, por si tienen sus dudas hace tiempo publique un tip acerca de esta función les recomiendo lo revisen antes de empezar.
Sin más rodeos a codear sea dicho.
Cuando mandamos a imprimir una fecha con PHP aparece en ingles y con el formato de Unix por defecto, nosotros podemos decir que es lo que queremos mostrar y como queremos hacerlo.
<?php echo date('l, d M Y'); //Formato de salida: Friday, 24 Feb 2012 ?>
Partiendo de esto, como logramos poner en español esa fecha, vamos a hacerlo de la manera más facil que es configurar la función setlocale la cual establece la información de la configuración regional y la cual hará todo el trabajo por nosotros. La función setlocale nos ofrece traducciones de cosas básicas, como la fecha, que suelen venir en el sistema operativo. Veamos como configurar setlocale para el idioma Español:
Algo muy importante para tener en cuenta al momento de trabajar con la función setlocale tambien tenemos que utilizar la función strftime la cual formatea una fecha/hora local según la configuración regional que manejemos con setlocale.
La secuencia estándar para el idioma Español que debería funcionar en cualquier plataforma es:
setlocale(LC_ALL,»es_ES»);
LC_ALL: Es una constante que especifica la categoría de las funciones afectadas por la configuración regional, en este caso toma en cuanta todas las constantes.
es_ES: Los primeros 2 caracteres identifican al idioma, los 2 últimos al país.
Ejemplo:
<?php setlocale(LC_ALL,"es_ES"); echo strftime("%A %d de %B del %Y"); //Salida: viernes 24 de febrero del 2012 ?>
Listo con esto ya tenemos nuestra fecha en español sin mayor problema, ya nada más es cosa de darle formato, pero eso ya les toca a ustedes XD.
Pero
Qué pasa si nuestro servidor no soporta setlocale :S , bueno para esto una forma fácil de hacerlo es usar arrays.
En este caso podemos hacer la traducción nosotros mismos. Por ejemplo, para el día de la semana haríamos algo así:
<?php $dias = array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sábado"); $meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"); echo $dias[date('w')]." ".date('d')." de ".$meses[date('n')-1]. " del ".date('Y') ; //Salida: Viernes 24 de Febrero del 2012 ?>
Explicando un poco el código por si dicen que carajo hizo este tipo, bueno vamos por partes:
Dentro de la variable $dias utilice un array en el que almacene los días de la semana, recordemos que los array sirven para almacenar, manejar y operar conjuntos de variables.
Al momento de mandar a imprimir en pantalla utilice la función date con el formato ‘w’ que nos devuelve la representación numérica del día de la semana (0 para domingo hasta 6 para sábado).
Para la parte de los meses utilice la misma lógica, pero hay que tomar en cuenta que el formato ‘n’ nos devuelve los números de los meses de 1 hasta 12, entonces esto lo que nos causaría es que se recorrerían los meses una posición, ejemplo si dejamos la $meses[date(‘n’)] lo que nos pondría seria el mes siguiente en lugar de poner el mes actual, ejemplo, si estamos en Febrero pondría Marzo y eso no es lo que queremos, de ahí que se le haya agregado el -1, con esto tenemos resuelta esta parte, si se preguntan por que pasa eso, es por que los arrarys empiezan a contar desde 0 y no desde 1, así como tenemos el arreglo de $meses sería de 0 hasta 11 ahí tendríamos las 12 posiciones.
Bueno espero que les sirva estos tips, cualquier cosa dejen su mensaje y estaré al pendiente para dar respuesta a sus dudas, cabe aclarar que no soy un master o gurú de PHP, todo lo que e aprendido es gracias a tutoriales y naufragando en internet y lo comparto con ustedes que como yo en algún momento nos encontramos aprendiendo cada día algo nuevo.
Saludos
Buenas,
Llevo poco tiempo programando en php y quiero introducir la fecha en las entradas que escribo en mi web. Ya encontré el mismo código que propones y funciona a la perfección.
Mi problema sería que cada vez que actualizo el navegador la hora y la fecha se actualizan. He cambiado el «strftime» por «date» pero mí problema persiste.
Me sabrías decir como hacerlo?
Gracias….
Hola
Como estas agregando la fecha a tus entradas, desde una BD o como las agregas, dame un poco de más información para ver como ayudarte.
Saludos
Hola ya entre a tu página y ya vi cual es el problema, lo que pasa es que en tu página donde muestras la nota, es donde se muestra la fecha del día no la fecha del día que lo publicaste.
El error se encuentra en que no estas mandando llamar la fecha desde tu BD, por eso es que se te muestra la fecha del día.
Lo que puedes hacer es copiar el código de la fecha que tienes cuando muestras los resúmenes de las notas en tu pagina inicial y pegarlo en tu página donde muestras la nota completa.
Saludos
Gracias por la respuesta pero en los resumenes lo he puesto sin código, esa también sería una tarea pendiente que tengo como la de empezar a usar las BD, tiempo al tiempo.
Me sabrías decir alguna manera de poder insertar la hora de la publicación?
Saludos
Como insertas las notas, de manera manual una a una?
O utilizas algún gestor de contenidos para publicarlas?
Excelente colaboracion… muchas gracias
Muchas gracias, muy útil.
Bro, ¿cómo hago para hacer un echo en español con el nombre abreviado del mes (M) por arrays?
Ejemplo: echo $meses[date(‘M’)-1]
Pero no funciona con la M mayúscula. Gracias, saludos
Muchas gracias por el aporte. Sin lugar a duda me ha sido de gran utilidad.
Saludos.
Hola tengo un problema exploro una fecha con mysql_fetch_array() y me muestra la fecha en una tabla en el formato americano y-m-d pero cuando uso date() me sale 31-12-1969 para todas los registros????.
Gracias por la ayuda.
Hola.
Yo el problema que tengo es que estoy tomando el valor del datetime picker de jQuery y lo pongo con este formato en el inputtext asi: 06/12/2012. (Podría ser así tambien: 06-12-2012)
Luego necesito insertarlo en la base de datos y con este formato: 2012-12-06, pero no logro cambiarlo ni con setlocale ni con nada.
Alguna sugerencia?
Gracias
Hola si lo tengo en una variabel asi
$dated = date(«Y-m-d H:i:s»); // server date/time
¿como lo cambio para poder poner el setlocale?
Es un script que tengo de comentarios y la fecha le he encontrado debe ir en esa linea
Muy buen aporte, grascias
Déjenme darles un consejo 😛
Yo uso este código y me va al 10+
Para insertar una fecha de edición o creación de un post recomiendo usar time() esto te devuelve un valor similar a «1372875879» eso es un timestamp, es bastante efectivo xD
Ahí ustedes lo insertan en su consulta :3 y lo reciben con algo como esto
y eso me devuelve: 03-07-2013 a las 14:24:39 luego lo complementan con los datos de los arrays y listo :3
Buenos dias , podrias explicarme como aplicar el codigo pero cuando traigo una fecha espelcifica por $_POST?, osea como capturo la fecha especifica y le hago la conversion con el array para los meses?
Gran aporte, aveces se olvidan estas cosas. Para los que tienen problemas con el UTF-8 les dejo el siguiente código:
Este ejemplo es para WordPress, si lo quieren usar en PHP puro, cambian la función get_the_date() por date()
Saludos!
Gran aporte, aveces se olvidan estas cosas. Para los que tienen problemas con el UTF-8 les dejo el siguiente código:
setlocale(LC_ALL,»es_ES»);
$fecha = utf8_encode(strftime(«%A %d de %B, %Y»,strtotime(get_the_date())));
echo $fecha;
Este ejemplo es para WordPress, si lo quieren usar en PHP puro, cambian la función get_the_date() por date()
Saludos!
[…] Fuente: lachabela.wordpress.com – fechas en espanol con php y setlocale […]
Excelente dato, sólo dejaré un tip, quizá a algunos les sirva; para no hacer el array de nombres de días y meses, pueden probar escribiendo:
setlocale(LC_ALL,»esp»);
en vez de:
setlocale(LC_ALL,»es_ES»);
A mi me funcionó, saludos.
Excelente dato, muchas gracias!
muchisimas gracias! tenia toda la tarde peleando con esto
Gracias por tu colaboración … y por las molestias que te tomas en dar algo de luz a los que no sabemos 😉
Yo llevo toda la mañana buscando cómo pasar un dato de timestamp de mi BD [de una noticia creada] a fecha en español para imprimirla en frontend.
No sé programar en PHP por lo que lo que voy cogiendo de un sitio y de otro no sé ensamblarlo y me desespero.
¿Podrías darme alguna pista? …
Gracias!!
Hola.
Yo lo que quiero es a partir de una fecha que tengo en la base de datos;
año: 1998
mes: 4
día: 25
Mostrar un texto como este:
Sábado 25 de Abril de 1998
Similar a este resultado:
strftime(«%A, %d de %B de %Y»)
Gracias.
En todo caso te recomiendo que generes un array con los datos de días y mes.
Mira, si tienes que usar datetime, puedes hacerlo así:
$fecha = $dateConsulta->format(‘d-M-Y’);
$fecha = str_replace(‘Jan’,’Ene’,$fecha);
$fecha = str_replace(‘Apr’,’Abr’,$fecha);
$fecha = str_replace(‘Aug’,’Ago’,$fecha);
$fecha = str_replace(‘Dec’,’Dic’,$fecha);
Esa fue la solución q encontré después de varias horas de buscar y que nada me funcionara
muy buen tuto, gracias.
Que bueno que te haya servido!
Saludos
Muchas Gracias por tu ayuda y gracias por explicar cada codificación me sirvió muchísimo. Saludos
Mira este post, verás que buena técnica utilizan. Espero que les sirva. Un saludo.
Disculpen, se quedó en el tintero, ahí va: http://www.webreunidos.es/blog/lista-select-desde-array-php/
[…] Fuentes: […]
Tengo unas fechas estipulada en en el desarrollo pero el mes me sale en inglés. He utilizado setlocale(LC_TIME, ‘es_ES’); pero no lo soporta, he intentado con array pero me toma es la fecha actual, y lo que quiero es traducir las fechas estipulada.
eso lo puedes hacer con DateTime().
amigos utilice el codigo:
y ahora como lo paso a otro documento.php para guardar en base de datos?
Estoy haciendo formularios y quiero guardar la fecha en la que fue llenado por el usuario
agradeceria su ayuda 🙂
el de arrays:
$dias = array(«Domingo»,»Lunes»,»Martes»,»Miercoles»,»Jueves»,»Viernes»,»Sábado»);
$meses = array(«Enero»,»Febrero»,»Marzo»,»Abril»,»Mayo»,»Junio»,»Julio»,»Agosto»,»Septiembre»,»Octubre»,»Noviembre»,»Diciembre»);
echo $dias[date(‘w’)].» «.date(‘d’).» de «.$meses[date(‘n’)-1]. » del «.date(‘Y’) ;
wajajajaja ya lo logre chicos. que feliz soy n.n aunq nadie aya despejado mi duda ya esta listo. soy grande wajajajajajaja
Gracias! atte: MoneyMaker *u^
alguna idea para que salgan en mayusculas ?
Muchas gracias, de gran ayuda.
Excelente colaboración mil gracias, lo andaba buscando.
Muchísimas gracias. Funcionó muy bien.
Gracias!!!!
exelente, use la funcion con arreglos para evitar que algun servdor no funciones bien, y corre perfecto
http://php.net/manual/en/timezones.php
$dias = array(«Domingo»,»Lunes»,»Martes»,»Miercoles»,»Jueves»,»Viernes»,»Sábado»);
$meses = array(«Enero»,»Febrero»,»Marzo»,»Abril»,»Mayo»,»Junio»,»Julio»,»Agosto»,»Septiembre»,»Octubre»,»Noviembre»,»Diciembre»);
echo $dias[date(‘w’)].», «.date(‘d’).» de «.$meses[date(‘n’)-1]. » del «.date(‘Y’).» «.date(«H:i»);
//Salida: Martes, 02 de Junio del 2015 23:44
?>
Todo en orden gracias por el aporte..
un lujo!
solo quería decirte que tu post sigue ayudando gente 🙂
excelente aporte me ha sido de gran utilidad
Eres mi heroe!, gracias.-
Muchas gracias me sirvio de gran manera este codigo
En caso de no tener generados los locales en el servidor se pueden crear con el comando:
locale-gen es_ES
locale-gen es_ES.UTF-8
y despues seleccionarlo con setLocale(LC_ALL, ‘es_ES.UTF-8’);
Alguien me puede ayudar necesito que entrege:
17/11/2015
y me devuelva
1447818194 === time();
muy buena alguien sabra xq se adelanta un dia mas…????
Gracias me sirvio mucho.
Muchas gracias, el seridor no soporta el cambio de setlocale así que iba a hacer una función que recibiera la información y regresará el día pero la idea de los rrays fue genial. 😀
Me fue de mucha utilidad.
Me sirvio mucho
tengo una aplicacion en windows 7 con IIS, PHP y Mysql y Java scrypt el problema que tengo es que migre la aplicacion a una maquina con windows 10 y instale xampp, ahora las paginas en el explorador de chrome me despliega la fecha con un dia despues, es decir si hoy es 6/21/2016 me despliega 22-jun-2016 el codigo que tengo es el siguiente:
echo «Usuario: «.$_user->first_name.» «.$_user->last_name.» –
Fecha: «.date(«d M Y»).» «; ?>
«echo «Usuario: «.$_user->first_name.» «.$_user->last_name.» – Fecha: «.date(«d M Y»).» «;
?>»
Gracias, muy buen post
Atención que los nombres de los meses y los días de la semana en español no van en mayúsculas de acuerdo a la norma.
Es ese array que españoliza los meses y días tendría que empezar por valor nulo = «», ya que la primera posición es cero. Por lo tanto si le pido la posición 2 (febrero) me va a devolver el texto marzo.
No hacedme caso, acabo de ver el -1: date(‘n’)-1
Muy bueno hace rato no programo y ando olvidado de la lógica, me ayudo mucho. Gracias
Muchisimas gracias, me sirvio mucho 😀
buenas para los que quieren hacerlo con bases de datos o juntarlo solo hagan esto:
a lado de los que ponen ‘d’ por ejemplo solo agreguen un ,strtotime($con lo que vendría ser lo que atrae la información de la base de datos de la fecha) y listo sierran el paréntesis. bueno eso es todo espero les alla ayudado.
Me sirvio y mejore para formatear una fecha desde bd
$valido_hasta=$rowp[‘valido_hasta’];
$newvalido_hasta = $dias[date(‘w’, strtotime($valido_hasta))].» «.date(‘d’, strtotime($valido_hasta)).» de «.$meses[date(‘n’, strtotime($valido_hasta))-1]. » del «.date(‘Y’, strtotime($valido_hasta)) ;
$valido_hasta=$rowp[‘valido_hasta’]; //ejemplo 2018-05-25 o $valido_hasta=»2018-05-25″;
$newvalido_hasta = $dias[date(‘w’, strtotime($valido_hasta))].” “.date(‘d’, strtotime($valido_hasta)).” de “.$meses[date(‘n’, strtotime($valido_hasta))-1]. ” del “.date(‘Y’, strtotime($valido_hasta)) ;
echo $newvalido_hasta;
/*
devuelve:
$newvalido_hasta =Viernes 25 de Mayo del 2018
*/
[…] que modificar al setlocale aquí te lo cuentan muy bien: (https://lachabela.wordpress.com/2012/02/24/fechas-en-espanol-con-php-y-setlocale/) Espero te ayude. Un […]
gracias me sirvio mucho, despues de tanto buscar
Muchisimas gracias un tema de wordpress ya me tenia loco que no se dejaba cambiar la fecha
Buenisimo mil gracias!!!!