Convertir fechas entre MySQL y castellano, en PHP

Valoración del artículo:
Un par de funciones que nos permitirán convertir las fechas entre el idioma castellano y el formato MySQL, útiles en el trabajo con fechas en PHP.
Publicado: 23/9/03
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Las fechas son uno de esos típicos asuntos que pueden hacer que nos rompamos la cabeza a la hora de programar una página. Razón de ello es que tienen distintos formatos dependiendo del país, del lenguaje de programación o de la base de datos que estemos utilizando.

Cuando utilizamos la tecnología PHP solemos trabajar con la base de datos MySQL. En estos dos sistemas los formatos de fechas cambian sensiblemente, así que será muy interesante conocer una manera rápida de pasar de un formato de fecha a otro, dependiendo de dónde vamos a utilizar esa fecha. Pues, si trabajamos con MySQL deberemos expresar la fecha de una manera distinta a la que lo haríamos a la hora de mostrarla en la página para que la entienda fácilmente un lector hispano.

En muchos casos, debemos vérnoslas entre dos tipos de formatos distintos, aunque podría ser peor. Por ejemplo, si la página estuviese en varios idiomas, sería importante escribir correctamente las fechas en cada uno de los idiomas.

Dejando temas relacionados con el idioma aparte -concentrándonos tan sólo en el Español-, en nuestras páginas programadas en PHP y con base de datos MySQL, tendremos que trabajar con dos formatos. Por un lado tenemos las fechas en castellano, que tienen el formato dd/mm/aaaa y por otro lado tenemos el formato de MySQL, que tiene la sintaxis aaaa-mm-dd.

Lo más cómodo, tal como vemos nosotros este problema, es crear un par de funciones que conviertan las fechas de un formato a otro. Habrá una función que convertirá la fecha de MySQL a Castellano y otra que lo convierta de Castellano a MySQL.

////////////////////////////////////////////////////
//Convierte fecha de mysql a normal
////////////////////////////////////////////////////
function cambiaf_a_normal($fecha){
    ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
    $lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
    return $lafecha;
}

////////////////////////////////////////////////////
//Convierte fecha de normal a mysql
////////////////////////////////////////////////////

function cambiaf_ a_mysql($fecha){
    ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
    $lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
    return $lafecha;
}


Las funciones utilizan expresiones regulares que no hemos visto todavía, así que no vamos a tratar de explicar cómo funcionan, sino que explicaremos cómo utilizarlas.

Mostrar en la página una fecha en castellano

Si tenemos una fecha en formato MySQL y deseamos colocarla en una página haremos algo como sigue.

Suponemos que la fecha está extrayéndose a través de una consulta a la base de datos y la tenemos en una variable llamada $fila->fecha. Además, colocamos la fecha en un campo de formulario.

<input type="text" name="fecha" value="<?echo cambiaf_a_normal($fila->fecha);?>">

Colocar en la base de datos una fecha en formato MySQL

Cuando el usuario nos manda una fecha, por ejemplo, a través de un formulario con un campo como el que acabamos de ver, lógicamente, escribirá la fecha en castellano. Pero nosotros deseamos guardarla en una base de datos en un formato distinto, así que habremos de convertirla.

Suponemos que tenemos la fecha en una variable llamada $fecha y que está en formato castellano. Además, queremos colocarla en una sentencia SQL que deseamos ejecutar en la base de datos para insertar un registro que contiene, entre otros datos, la fecha que el usuario ha escrito.

mysql_query ("insert into documento (titulo_documento, fecha_documento, cuerpo_documento) values ('$titulo_documento', '" . cambiaf_a_mysql($fecha) . "', '$cuerpo_documento')");

Comentarios
Fueron enviados 35 comentarios al artículo
1 comentario no revisado
34 comentarios revisados:
Por: curro
03/11/03
yo uso estas otras, más simples. Además, la segunda nos deja la fecha en el formato local...

function DateToQuotedMySQLDate($Fecha)
{
if ($Fecha<>""){
   $trozos=explode("/",$Fecha,3);
   return "'".$trozos[2]."-".$trozos[1]."-".$trozos[0]."'"; }
else
   {return "NULL";}
}

function MySQLDateToDate($MySQLFecha)
{
if (($MySQLFecha == "") or ($MySQLFecha == "0000-00-00") )
    {return "";}
else
    {return date("d/m/Y",strtotime($MySQLFecha));}
}
Por: Mario
16/11/03
Bueno, quizas mi suloción es un tanto larga o tecnicamente no es correcta... pero el caso es que a mi me funciona y como estoy empezando con el php pues me conformo. Alguno se reirá cuando lo vea pero espero que a otros le sea de utilidad. Un saludo

<?php
// traducefecha.php
// 14 de Octubre de 2003
// Traduce una fecha en formato mm/dd/yyy a formato texto en castellano
// Desde la pagina llamaremos a la funcion
// include("traducefecha.php");
// echo traducefecha("11/15/2003"); Visualiza la fecha
// Donde la fecha ponemos la variable que queremos traducir en formato mm/dd/yyyy
//
function traducefecha($fecha)
    {
    $fecha= strtotime($fecha); // convierte la fecha de formato mm/dd/yyyy a marca de tiempo
    $diasemana=date("w", $fecha);// optiene el número del dia de la semana. El 0 es domingo
       switch ($diasemana)
       {
       case "0":
          $diasemana="Domingo";
          break;
       case "1":
          $diasemana="Lunes";
          break;
       case "2":
          $diasemana="Martes";
          break;
       case "3":
          $diasemana="Miércoles";
          break;
       case "4":
          $diasemana="Jueves";
          break;
       case "5":
          $diasemana="Viernes";
          break;
       case "6":
          $diasemana="Sábado";
          break;
       }
    $dia=date("d",$fecha); // día del mes en número
    $mes=date("m",$fecha); // número del mes de 01 a 12
       switch($mes)
       {
       case "01":
          $mes="Enero";
          break;
       case "02":
          $mes="Febrero";
          break;
       case "03":
          $mes="Marzo";
          break;
       case "04":
          $mes="Abril";
          break;
       case "05":
          $mes="Mayo";
          break;
       case "06":
          $mes="Junio";
          break;
       case "07":
          $mes="Julio";
          break;
       case "08":
          $mes="Agosto";
          break;
       case "09":
          $mes="Septiembre";
          break;
       case "10":
          $mes="Octubre";
          break;
       case "11":
          $mes="Noviembre";
          break;
       case "12":
          $mes="Diciembre";
          break;
       }
    $ano=date("Y",$fecha); // optenemos el año en formato 4 digitos
    $fecha= $diasemana.", ".$dia." de ".$mes." de ".$ano; // unimos el resultado en una unica cadena
    return $fecha; //enviamos la fecha al programa
    }
?>
Por: Versae
19/1/04
//Yo tb me encontré con ese problema pero simplemente les doy la vuelte a las fechas:

function daterev($date)
{
    if (empty($date))
       return "";
    else
    {
       $date = strtr($date,"/","-");
       $i = 0;
       $tmp = strtok($date,"-");
       while ($tmp)
       {
          $dateok[$i] = "$tmp";
          $i++;
          $tmp = strtok("-");
       }
       return ($dateok[2]."-".$dateok[1]."-".$dateok[0]);
    }
}

//Además para comparar uso la siguiente función

function datecmp($f1, $f2)
{
    $anyo1=(int)substr($f1,1,4);
    $anyo2=(int)substr($f2,1,4);
    if ($anyo1==$anyo2)
    {
       $mes1=(int)substr($f1,6,2);
       $mes2=(int)substr($f2,6,2);
       if ($mes1==$mes2)
       {
          $dia1=(int)substr($f1,9,2);
          $dia2=(int)substr($f2,9,2);
          if ($dia1==$dia2)
             return 0;
          elseif ($dia1>$dia2)
             return 1;
          else
             return -1;
       }
       elseif ($mes1>$mes2)
          return 1;
       else
          return -1;
    }
    elseif ($anyo1>$anyo2)
       return 1;
    else
       return -1;
}

//Devuelve 0 si son iguales, -1 si la primera es menor y 1 si la primera es mayor

Por: derkeNuke
13/4/04
Hay maneras de ahorrarte tanto codigo:

switch ($diasemana)
{
case "0":
    $diasemana="Domingo";
    break;
case "1":
    $diasemana="Lunes";
    break;
case "2":
    $diasemana="Martes";
    break;
case "3":
    $diasemana="Miércoles";
    break;
case "4":
    $diasemana="Jueves";
    break;
case "5":
    $diasemana="Viernes";
    break;
case "6":
    $diasemana="Sábado";
    break;
}

sería lo mismo que crear un array asi:

$diasemanales=["Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sábado"];

Y sustituir todo el switch ese con:

$diasemana=$diasemanales[$diasemana];

PD: Con los meses se puede hacer lo mismo, espero que les interese.

Por: lym
12/6/04
El único sitio de la red donde se explica con claridad. Funciona perfectamente, gracias. Sólo comentar que si a alguien no le gustan las barras diagonales para separar la fecha, que cambie en la función dichas barras por guiones, por ejemplo. Parece obvio pero ya me lo había preguntado algún amiguete y por si alguien tenía esa misma duda ahí queda dicho.
Por: toni123
26/8/04
Yo tambien me encontre con el problema de las fechas, sobre todo el tema de que las funciones te la devuelven en 'ingles' asique use lo siguiente, facil, rapido , util y practico....

si tenemos:

$hoy=strftime("%A, %d %B %Y);
echo $hoy;

nos pondra la fecha en ingles, ejemplo:

monday, 12 january 2004

asi que yo puse:

setlocale(LC_TIME,"spanish");
$hoy=strftime("%A, %d de %B de %Y);
echo $hoy;

y esto nos lo traslada al castellano
Lunes, 12 enero 2004

ahora lo siguiente y si tenemos ya la fecha almacenada en formato texto?? por ejemplo:

$hoy="monday, 12 january 2004";

como lo 'traducimos'?
yo puse lo siguiente:

$hoy=str_replace("Monday","Lunes",$hoy);
$hoy=str_replace("Tuesday","Martes",$hoy);
$hoy=str_replace("Wednesday","Miercoles",$hoy);
$hoy=str_replace("Thursday","Jueves",$hoy);
$hoy=str_replace("Friday","Viernes",$hoy);
$hoy=str_replace("Saturday","Sabado",$hoy);
$hoy=str_replace("Sunday","Domingo",$hoy);
$hoy=str_replace("January","Enero",$hoy);
$hoy=str_replace("February","Febrero",$hoy);
$hoy=str_replace("March","Marzo",$hoy);
$hoy=str_replace("April","Abril",$hoy);
$hoy=str_replace("May","Mayo",$hoy);
$hoy=str_replace("June","Junio",$hoy);
$hoy=str_replace("July","Julio",$hoy);
$hoy=str_replace("August","Agosto",$hoy);
$hoy=str_replace("September","Septiembre",$hoy);
$hoy=str_replace("October","Octubre",$hoy);
$hoy=str_replace("November","Noviembre",$hoy);
$hoy=str_replace("December","Diciembre",$hoy);
echo $hoy;

simplemente hacemos un reemplace sin miramientos.... todo lo que sea monday lo cambiamos por lunes, etc etc etc y lo mismo con los meses todo lo que sea january por enero, february por febrero etc etc etc...

lo dicho... rapido, util y practico...

Espero que la idea le sirva a alguien... (aunke posiblemente halla mil formas mas y mejores de hacerlo....)

Toni123
Por: androver
25/9/04
Correcion: Los sub strings de la funcion anterior estaban mal, provocando el mal funcionamiento de la misma... aqui los nuevos valores (con echos para confirmar que segmenta bien las fechas)

function datecmp($f1, $f2)
{
    $anyo1=(int)substr($f1,0,4);
    $anyo2=(int)substr($f2,0,4);
    echo "año 1: ".$anyo1." --- año 2: ".$anyo2;
    if ($anyo1==$anyo2)
    {
       $mes1=(int)substr($f1,5,2);
       $mes2=(int)substr($f2,5,2);
       echo "mes 1: ".$mes1." --- mes2: ".$mes2;
       if ($mes1==$mes2)
       {
          $dia1=(int)substr($f1,8,2);
          $dia2=(int)substr($f2,8,2);
          echo "dia1 1: ".$dia1." --- dia2: ".$dia2;
          if ($dia1==$dia2)
             return 0;
          elseif ($dia1>$dia2)
             return 1;
          else
             return -1;
       }
       elseif ($mes1>$mes2)
          return 1;
       else
          return -1;
       }
    elseif ($anyo1>$anyo2)
       return 1;
    else
       return -1;
}

Por: patoxs
12/1/05
No se pero para el cambio de fecha tuve cualquier problema aqui va mi solcion bastante sencilla

$fecha=$_POST['fecha']
$fch=explode("/",$fecha);
$fecha=$fch[2]."-".$fch[1]."-".$fch[0];

para pasar a a mysql
INSERT INTO tabla VALUES ('campo1','$fecha','campo2')

eso seria
Por: Esteban
07/4/05
Hola, yo utilizo esta función para convertir fechas.

Saludos

STV

function f_datef($date)
{
# ==========================================================
# ==== Recibe una fecha con formato aaaa-mm-dd hh:mm:ss ====
# ==== Devuelve una fecha con formato dd-mm-aa ====
# ==========================================================

$year=substr($date,0,4);
$month=substr($date,5,2);
$day=substr($date,8,2);
$date=$day."-".$month."-".$year;

return ($date);
}
Por: Caronte
19/5/05
Me ha parecido interesante el artículo. Está claro que he de aprender a usar expresiones regulares porque son muy potentes.

Pero en este caso creo que se puede resolver el paso de MySQL a español y de español a MySQL en una única sentencia:

$sFechaNormal = implode( '/', array_reverse( explode( '-', $sFechaMySQL ) ) ) ;

$sFechaMySQL = implode( '/', array_reverse( explode( '-', $sFechaNormal ) ) ) ;

Con explode hago el trabajo de las expresiones regulares y con array_reverse e implode el trabajo de concatenación de las funciones.

Hacer una función genérica que cambiara unos símbolos por otros y le diera la vuelta sería tan fácil como esto:

function cambiarFecha( $sFecha, $sSimboloInicial, $sSimboloFinal )
{
return implode( $sSimboloFinal, array_reverse( explode( $sSimboloInicial, $sFecha ) ) ) ;
}

De esta manera, si quisiéramos una fecha de MySQL en formato dd/mm/yyyy tenndríamos que llamarla así:

$sFechaNormalConBarra = cambiarFecha( $sFechaMySQL, '-', '/' ) ;

Si quisiéramos otro tipo de separador con sustituir la barra (/) por ese separador suficiente:

$sFechaNormalConMenos = cambiarFecha( $sFechaMySQL, '-', '-' ) ;

La variable $sFechaNormalConMenos guarda ahora la fecha de MySQL con el formato dd-mm-yyyy.

Lo mismo para guardarlo en MySQL :

$sFechaMySQL = cambiarFecha( $sFechaNormalConBarra, '/', '-' ) ;

Lo único que hay que tener en cuenta es saber cuál es el separador con el que viene la fecha. En este caso $sFechaNormalConBarra venía con la barra (/).

Espero que esto le haya servido a alguien a ahorrarse unas cuantas líneas de código.

Un saludo.
Por: Juan Jose Burgos Fiorilo
21/5/05
ESCRIBIR Y LEER LA FECHA Y HORA CON PHP Y MYSQL
//Invertimos la fecha y hora del sistena a formato en ingles
//$fecha = Variable que contiene la fecha


$cambiar_fecha = explode("/",$fecha);
$fecha_ingles = $cambiar_fecha[2]."-".$cambiar_fecha[1]."-".$cambiar_fecha[0];

//Obtenemos la hora actual del sistema
$hora = date('h:i:s');

//Concatenamos la hora y fecha del sistema
$fecha_hora = $fecha_ingles." ".$hora;



//Leemos la fecha y hora de MySQL (que esta en ingles)
//Invertimos la fecha(no mostramos la hora) a formato en español
//$ver_fecha[0] = fecha que leemos de la base de datos(con mysql_fetch_array)

//Separamos la fecha de la hora
$obtener_fecha = explode(" ",$ver_fecha[0]);

//Obtenemos la fecha(en ingles)
$fecha_ingles = $obtener_fecha[0];

//Separamos la fecha(ingles)
$traducir_fecha = explode("-",$fecha_ingles);

//Por ultimo acomodamos la fecha que esta en ingles a formato español
$fecha_espaniol = $traducir_fecha[2]." / ".$traducir_fecha[1]." / ".$traducir_fecha[0];
Por: JESUS_DE_CHAMBERI
30/6/05
Ey lo k buscaba estaba justo al final thanx por el ultimo script por pequeño y sencillo
Por: NAcho
04/7/05
Hola, quizas les parezca incluso mas facil, por lo menos usando un formato de fecha de numeros. Pero MySQL tiene una funcion incorporada para presentar fechas en tal o cual formato, pero siempre hablando a la hora de mostrar "resultados" no de insertarlos. Aunque me parece alguna vez haber visto una funcion de MySQL que permitia directamente insertar la fecha en formato castellano. De todas maneras les muestro como hago yo:

$sql = "SELECT id, autor, titulo, mensaje, ";
$sql.= "DATE_FORMAT(fecha, '%d/%m/%Y %H:%i:%s') as enviado FROM foro ";
$sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC";
$rs = mysql_query($sql, $con);

Como ven en la misma sentencia SQL le pido que me presente los valores de la columna fecha en el formato que yo quiero(castellano). Espero que les sirva de algo!, chaus!
Por: Sakura
08/7/05
Me parece muy bien esta clase de articulos, pero a mi me gustaria que publicaran uno con la misma tematica pero ahora enfocada a PHP y una base de datos de access
gracias.
Por: Ismael
11/7/05
Bien, perfecto. El convertir la fecha "a pelo" no es quizá muy elegante, pero funciona a la perfección.
Por: Spielberg
12/9/05
Aquí esta mi breve aportación aunque creo que está ya todo dicho sobre esta función. Un saludo desde Pamplona;

function cambia_a_normal($fecha){
$meses = array('01' => 'Enero','02' => 'Febrero', '03' => 'Marzo', '04' => 'Abril', '05' => 'Mayo', '06' => 'Junio', '07' => 'Julio', '08' => 'Agosto', '09' => 'Septiembre', '10' => 'Octubre', '11' => 'Noviembre', '12' => 'Diciembre');
ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
$lafecha = $mifecha[3]."/ ".$meses[$mifecha[2]]."/ ".$mifecha[1];
return $lafecha;
}
Por: Rodrigo
23/9/05
Yo uso este codigo para obtener la fecha formateda y en ES

setlocale ("LC_TIME", "spanish");
$Fecha="2006-01-03";
print(strftime("%d %b %y, en es ",strtotime($Fecha)));
Por: Erika
18/10/05
yo lo hago de esta manera:

function fecha($fecha)
{
    if ($fecha)
   {
      $f=split("-",$fecha);
      $nummes=(int)$f[1];
      $mes1="0-Enero-Febre-Marzo-Abril-Mayo-Junio-Julio-Agosto-Septiembre-Octubre-Noviembre-Diciembre";
      $mes1=split("-",$mes1);
      $desfecha="$f[2] de $mes1[$nummes] del $f[0]";
      return $desfecha;
   }


recibo la fecha por ejemplo 2005-10-18 y la retorna 10 de Octubre del 2005.
Espero que le ayude en algo
Por: Iratxe
28/10/05
Muchisimas gracias, por las aportaciones que daís de todos los temas.
Me parece que es desarrolloweb.com es un sitio super completo para todos los programadores.

Muchas gracias
Iratxe
Por: Juan
08/3/06
ami me sirvio lo sig. lo dejo para las posteridad ;-)
/////////////////////////////////////////////////////////////////////
setlocale(LC_TIME,'spanish');
$dia_inicio=strftime("%A, %d %B de %Y", strtotime("$FECHAINI")) ;
echo strtoupper($dia_inicio);
echo"<br>";
$dia_final=strftime("%A, %d %B de %Y", strtotime("$FECHAFIN")) ;
echo strtoupper($dia_final);
/////////////////////////////////////////////////////////////////////
Atte: Big Chinux
Por: pablo
23/5/06
Para transformar las fechas retornadas por MySql a un formato legible para nosotros o sea el castellano,se puede utilizar directamente una funcion de fechas en el query SQL. La funcion MySql es DATE_FORMAT(fecha,'formato') por ejemplo: select Date_format(cumpleaños,'%d-%m-%Y') from agenda esto nos devolveria el campo cumpleaños (suponiendo que ahi tenemos las fechas de cumpleaños) en el formato dd-mm-yyyy (01-01-2000). Esta funcion nos ahorra el tiempo de tener que incluir una funcion en php y aprovechamos de manera directa el motor de base de datos para que haga la transformacion. Lamentablemente no he encontrado una funcion en My que transforme la fecha en castellano a formato My de manera eficiente, por lo que usaria una funcion similar a la que se publico en el primer post. Saludos!!
Por: camilo
25/7/06
Cuando selecionas un campo fecha desde la base de datos se muestra por defecto de la siguiente manera 2006-07-24 (y-m-d), esta forma no la mejor adecuada para mostrar una fecha por lo que yo recomiendo utilizar el sgte. comando para formatear la fecha. en ves de estar complicandose la vida con funciones complejas.se puede hacer a si ej: SELECT rut, ,DATE_FORMAT(a.fecha_sol,'%d/%m/%Y') form tabla .. esto te devuelve la fecha de la siguiente manera (d-m-Y)
esperop les sirva.
Por: scar98
27/9/06
yo creo que siempre es mejor utilizar las funciones que nos vienen en MySQL por defecto

DATE_FORMAT(date,"%d-%m-%Y")
STR_TO_DATE("27-11-1976","%d-%m-%Y")

son funciones de SQL, estan disponibles en MySQL.

crear unas funciones propias es una locura!!!
Por: Heraldo Carlos
11/2/07
Se puede formatear la fecha directamente con SQL, por ejmplo con:

select *, date_format(fecha,'%d/%m/%Y %H:%m' ) as fecha_es from $tabla

y podemos trabajar con un nuevo campo "fecha_es" que tiene la fecha con formato dd/mm/aaaa
Por: wilmar tejada
02/10/07
Muchas gracias por el aporte erika.. lo modifique un poco para incluir la hora en la conversion de fecha.

function fecha($fecha)
{
if ($fecha)
{
$p=split(" ",$fecha);
$f=split("-",$p[0]);
$h=split(":",$p[1]);

//cambio de fecha
$nummes=(int)$f[1];
$mes1="0-Ene-Feb-Mar-Abr-May-Jun-Jul-Agos-Sept-Oct-Nov-Dic";
$mes1=split("-",$mes1);

//cambio de hora

$numhora=(int)$h[0];
$momento = 'a.m.';
if ($numhora >= 13)
{
$numhora = $numhora - 12;
$momento = 'p.m.';
}

$desfechahora="$mes1[$nummes] $f[2] del $f[0] $numhora:$h[1] $momento";
return $desfechahora;
}
}

formato entrante : 2007-10-02 11:36:59
formato saliente : Oct 02 del 2007 11:36 a.m.

Por: spawn
20/11/07
buenas. viendo este problemilla con las fecha se me ocurio mostrar una solucion que uso, me gustaria ver criticas a mi metodo, graxias.

setlocale (LC_TIME, "sp");

$dias++;
$proximo=mktime(0,0,0,date("m"),date("d")+$dias ,date("Y"));
$fecha = strftime("%a %d/%m/%y",$proximo);

este codigo --setlocaleme (LC_TIME, "sp");--- pone lafecha en formato (sp)panish
el valor de lavariable fecha al fin de lafuncion es de por ej lun 10/11/07

las lineas queles siguen son yapara adelantar una fechaporcada incremento del contador
$dias--; me retrasaria fechas hacia atras
Por: Norberto
14/12/07
Aqui les dejo un codigo que arme con un poco de informacion que vi en estos foros, esta funcion es solo para "DATE" de SQL.
Espero les sirva.

$fecha = split("-",$row_tabla['Fecha']);
$mes = array('01' => 'Enero','02' => 'Febrero', '03' => 'Marzo', '04' => 'Abril', '05' => 'Mayo', '06' => 'Junio', '07' => 'Julio', '08' => 'Agosto', '09' => 'Septiembre', '10' => 'Octubre', '11' => 'Noviembre', '12' => 'Diciembre');
$fecha_completa = $fecha[2].' / '.$mes[$fecha[1]].' / '.$fecha[0];
echo $fecha_completa;
Por: Halethh
27/9/08
Pues yo por mas que lo intente de plano no me salio con la función asi que lo que hice fue hacerlo directamente en la consulta:

$sql = "SELECT date_format(dia, '%d/%m/%Y') AS Fecha FROM `tabla` WHERE 1 ORDER BY dia ASC;";


Por: Gondoliere
03/1/09
En el ejemplo 2 de este tutorial hay un error de sintaxis. Hay un espacio en blanco que da un error. Dicho espacio esta ubicado en el nombre de la funcion y aparece como:

cambiaf_ a_mysql

Y deberias ser:

cambiaf_a_mysql
Por: Lucas
03/4/09
Probe sus metodos y van joya, muchisimas gracias me estaba rompiendo la cabeza, usaba la funcion date pero me dejaba la fecha en 31/12/1969.
No me funciona
Por: dartz
25/5/09
Hola, yo tengo este codigo:

----------------------------


// VALIDA LA FECHA.

/*****************************************************************/

//Verificar y validar fechas
//Considerando que puede usarse los siguiente caracteres como separador de dígitos: "/", "-" y "."; además del siguiente formato DD-MM-YYYY.
function check_date($fecha){
$seperator = "[/-/.]";
return preg_match("#^(((0?[1-9]|1d|2[0-8]){$seperator}(0?[1-9]|1[012])|(29|30){$seperator}(0?[13456789]|1[012])|31{$seperator}(0?[13578]|1[02])){$seperator}(19|[2-9]d)d{2}|29{$seperator}0?2{$seperator}((19|[2-9]d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$#", $fecha)==1?true:false;
}

if (check_date($fecha)){


function cambiaf_ a_mysql($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}

} else {
echo $fecha . " <b><font color='red'>Introducie correctamente la fecha.</font> <font color='yellow'>DD/MM/AAAA</font></b>";
}

/*****************************************************************/


----------------------------

Me podrias ayudar??
Muy bueno.
Por: Yigo
30/6/09
Yo usé este método en PHP 5.algo xD:
$datetime = date_create($filas['fecha']);
echo $datetime->format('d-m-Y, a las h:ia');
devolvía: 30/06/2009, a las 1:25pm .
Pero por alguna razón al subirla al servidor no la reconoció y también tenía el PHP 5.tanto, así que opté igual por usar DATE_FORMAT y con LOWER para pasarla a minúscola el AM o PM.

$query = mysql_query("SELECT LOWER( DATE_FORMAT( fecha, '%d-%m-%Y, a las %l:%i%p' ) ) AS fecha FROM comentario_ar WHERE id=1");
$fila = mysql_fetch_array($query);
echo $fila['fecha'];

imprime: 30-06-2009, a las 1:19pm

Gracias por compartir código.

guslozu...
Consulta en el caso cuando se tiene que actualizar o editar los registros
24/9/09
Hola, el articulo es excelente y me funciono perfecto con el tema de las fechas que me estaba causando bastantes problemas y con esto lo pude resolver. Pero me gustaria consultarles que pasa cuando se esta actualizando o editando un registro, yo lo he probado y logro que se vean bien los datos o sea los convierto de mysql a normal, pero al momento de volver a transformar de normal en mysql para poder actualizar no pude lograrlo. en mi codigo ejecuto la siguiente sentencia mysql con la cual logro actualizar de forma correcta colocando la fecha yyyy-mm-dd , o sea visualizo en el formulario de forma correcta dd/mm/yyyy pero para poder actualizar esta fecha debo borrar borrar todo y colocarla yyyy-mm-dd

$updateSQL = sprintf("UPDATE dominios SET dominio_nombre=%s, dominio_delegacion=%s, dominio_vencimiento=%s WHERE id_dominio=%s",

en este caso la fecha corresponde a dominio_vencimiento, pero no se como colocar la funcion cambiaf_a_mysql($fecha), para convertir de normal a mysql para poder insertar en BD. Como veran soy bastante novato , espero haber sido claro y que me puedan ayudar, Un saludo grande para todos.

nely_so...
cambiar formato de Fecha
08/10/09
Muchisimas gracias a todos y en especial a Nacho.
Nely

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo