Convertir fechas entre MySQL y castellano, en PHP

  • Por
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.
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')");

Autor

Miguel Angel Álvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

curro

03/11/2003
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));}
}

Mario

16/11/2003
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
    }
?>

Versae

19/1/2004
//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

derkeNuke

13/4/2004
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.

lym

12/6/2004
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.

toni123

26/8/2004
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

androver

25/9/2004
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;
}

patoxs

12/1/2005
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

Esteban

07/4/2005
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);
}

Caronte

19/5/2005
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.

Juan Jose Burgos Fiorilo

21/5/2005
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];

JESUS_DE_CHAMBERI

30/6/2005
Ey lo k buscaba estaba justo al final thanx por el ultimo script por pequeño y sencillo

NAcho

04/7/2005
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!

Sakura

08/7/2005
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.

Ismael

11/7/2005
Bien, perfecto. El convertir la fecha "a pelo" no es quizá muy elegante, pero funciona a la perfección.

Spielberg

12/9/2005
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;
}

Rodrigo

23/9/2005
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)));

Erika

18/10/2005
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

Iratxe

28/10/2005
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

Juan

08/3/2006
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

pablo

23/5/2006
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!!

camilo

25/7/2006
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.

scar98

27/9/2006
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!!!

Heraldo Carlos

11/2/2007
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

wilmar tejada

02/10/2007
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.

spawn

20/11/2007
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

Norberto

14/12/2007
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;

Halethh

27/9/2008
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;";


Gondoliere

03/1/2009
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

Lucas

03/4/2009
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.

dartz

25/5/2009
No me funciona
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??

Yigo

30/6/2009
Muy bueno.
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.

Carlos Castillo

01/8/2009
Comentarios
Por si alguien quiere usar el código del autor haciéndole el honor de reconocer su autoría, esto puede ahorrale unos segundos:
/**
* Convierte fecha de mysql a normal
* @param $fecha Fecha en formato mysql
* @return Fecha en formato "normal"
* @author Miguel Angel Alvarez
* @link http://www.desarrolloweb.com/articulos/1280.php
*/
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
* @param $fecha Fecha en formato "normal"
* @return Fecha en formato mysql
* @author Miguel Angel Alvarez
* @link http://www.desarrolloweb.com/articulos/1280.php
*/
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;
}

guslozua

24/9/2009
Consulta en el caso cuando se tiene que actualizar o editar los registros
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_soca_olazbal

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

Alejandro

26/2/2010
GRACIAS
las dos funciones me fueron de gran utilidad muchas gracias.

alexjaviel

19/3/2010
me funciono
a mi me funciono perfectamente la segunda funcion que tenemos en el ejeplo principal, muchas gracias.

carlos

17/1/2011
Mil Gracias!!!
Te agradezcon, me has sacado de un apuro.!!!

rosemberg

11/4/2011
Coberciones
miren yo hice esto basado en muchos comentario y la verdad me funciona de maravilla, me cambian el tipo de fecha dependiendo de como metamos la fecha lo regresa ala inversa

<?php
class CabeceraPagina{
private $fecha;

Public function fecha_esp($fecha)
{$fch=explode("/",$fecha);
$fecha=$fch[2]."-".$fch[1]."-".$fch[0];
return($fecha);
}

}
$cabecera= new CabeceraPagina();
$ing=$cabecera->fecha_esp('1234/12/12');
echo"la fecah en ingles es.".$ing;

$cabecera2= new CabeceraPagina();
$ing2=$cabecera2->fecha_esp('1234/12/12');
echo"la fecah en ingles es.".$ing;
?>
<h2>By Ross
chekenlo y adaptelo a su manera de prgramar </problemas>

Hormigaclub

14/5/2011
Tarde tarde ....
Esta esbastante curiosa ....

function fechaHoraNormal ($fechaHora)
{
$mFechaHora = date_parse($fechaHora);
$fecha = $mFechaHora[day]."-".$mFechaHora[month]."-".$mFechaHora[year]." ".$mFechaHora[hour].":".$mFechaHora[minute];
return $fecha;
}

Eleazar

27/6/2011
buen codigo
muy bueno el codigo aqui les pongo este por si acaso da como resultado fecha en castellano y hora en am o pm es para formato datetime de mysql.

suerte...

function convertir_fecha($fecha_de_entrada){
list($fecha,$hora) = split(" ",$fecha_de_entrada);
list($yyyy,$mm,$dd) = split("-",$fecha);
$hora_salida=date("g:i a",strtotime($hora));
$fecha_salida= $dd.'-'.$mm.'-'.$yyyy.' '.$hora_salida;
return $fecha_salida;
}

Eleazar

27/6/2011
un poco mas...
Les completo un poco mas el codigo para quienes qieren algo mas completo como anteriormente les dije convierte de esto: AAAA-MM-DD HH:MM:SS
a esto por ejemplo: Lunes 27 de Junio del 2011 a las: 4:06 pm.

date_default_timezone_set('America/Caracas');
function convertir_fecha($fecha_de_entrada){
list($pre_fecha,$hora) = split(" ",$fecha_de_entrada);
$fecha=date('Y-m-d-w',strtotime($pre_fecha));
list($yyyy,$mm,$dd,$lll) = split("-",$fecha);
$semana=array("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo");
$week=array("1","2","3","4","5","6","0");
$dia_semana=str_replace($week,$semana,$lll);
$hora_salida=date("g:i a",strtotime($hora));
$numeros=array("01","02","03","04","5","06","07","08","09","10","11","12");
$meses=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Nobiembre","Diciembre");
$mes=str_replace($numeros,$meses,$mm);
$fecha_salida= $dia_semana . ' ' . ltrim($dd,'0').' de '.$mes.' del '.$yyyy.' a las: '.$hora_salida;
return $fecha_salida;
}

cubboo

21/4/2012
Funciona!!
utilicen el método de Mario funciona excelente:

Gracias Hermano!!! me sirvio de mucho ...

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
}

Estibens

22/11/2012
Actualizar estas funsiones o articulo
Actualizar estas funsiones o articulo

Joel

26/3/2013
Graciass
Gracias Maestro!!