Fueron enviados 32 comentarios al artículo

32 comentarios revisados:
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));}
}
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
}
?>
//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
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.
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.
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
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;
}
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
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);
}
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
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!
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.
Bien, perfecto. El convertir la fecha "a pelo" no es quizá muy elegante, pero funciona a la perfección.
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;
}
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)));
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
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
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
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!!
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.
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.
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
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;
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;";
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
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.