Foros del Web » Programando para Internet » PHP »

MySQL > datetime

Estas en el tema de MySQL > datetime en el foro de PHP en Foros del Web. Hola mis queridos compañeros. Tengo un problema, cuando no?, con una tabla. Guardo una serie de datos y en un campo datetime su fecha y ...
  #1 (permalink)  
Antiguo 06/02/2005, 09:43
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
MySQL > datetime

Hola mis queridos compañeros.

Tengo un problema, cuando no?, con una tabla.
Guardo una serie de datos y en un campo datetime su fecha y hora.
el problema existe cuando quiero mostrar esa fecha con formato
día/mes/año hora:minutos
Encontré un script que sólo funciona con el dia mes y año, pero no muestra la hora, me podrán ayudar?

les dejo el script que funciona a medias:
<?
ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $row["ini_fec"], $mifecha);
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
echo $lafecha;
?>
  #2 (permalink)  
Antiguo 06/02/2005, 11:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Lo puedes hacer directamente desde MySQL con la funcion DATE_FORMAT (www.mysql.com/date_format). Funciona parecido a alfuncion date() de PHP, le especificas el formato que quieres.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 06/02/2005, 11:07
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Tengo echa esta función que hace más o menos eso:

// Está funcion toma una fecha con formato 2004/12/01 y lo transforma a 01/dic/2004

function convierte_fecha($fecha_ingles){
$ano=substr($fecha_ingles, 0, 4);
$mes=substr($fecha_ingles, 5, 2);
$dia=substr($fecha_ingles, 8, 2);

if ($mes=="01") $mes="Ene";
elseif ($mes=="02") $mes="Feb";
elseif ($mes=="03") $mes="Mar";
elseif ($mes=="04") $mes="Abr";
elseif ($mes=="05") $mes="May";
elseif ($mes=="06") $mes="Jun";
elseif ($mes=="07") $mes="Jul";
elseif ($mes=="08") $mes="Ago";
elseif ($mes=="09") $mes="Sep";
elseif ($mes=="10") $mes="Oct";
elseif ($mes=="11") $mes="Nov";
elseif ($mes=="12") $mes="Dic";
else $mes="--";
$fecha_castellano = ($dia."/".$mes."/".$ano);
return $fecha_castellano;
}

Puedes modificarla a tu gusto.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #4 (permalink)  
Antiguo 06/02/2005, 11:09
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
entiendo eso y gracias.. pero se me complica al intentar mostrar la hora (que está en el mismo campo que la fecha)
  #5 (permalink)  
Antiguo 06/02/2005, 12:54
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Puedes añadir la línea: $hora=substr($fecha_mysql, 11, 5);

function convierte_fecha($fecha_mysql){
$ano=substr($fecha_mysql, 0, 4);
$mes=substr($fecha_mysql, 5, 2);
$dia=substr($fecha_mysql, 8, 2);
$hora=substr($fecha_mysql, 11, 5);

$fecha_formateada = ($dia."-".$mes."-".$ano." ".$hora);
return $fecha_formateada;
}

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 06/02/2005 a las 12:55
  #6 (permalink)  
Antiguo 06/02/2005, 17:33
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Bueno... lo mejor es resolver todo desde el SQL como dice josemi y no meter a PHP para nada. MySQL te provee un montón de funciones precisamente para trabajar con esos campos (DATE, DATETIME). Puedes formatear, extraer sólo el día, la hora, etc... incluso con su nombre (monday, january, etc). Así podrás utilizar el mismo campo para varias operaciones. Y es mucho más eficiente hacerlo así que desde el PHP.
Más info en:
http://dev.mysql.com/doc/mysql/en/da...functions.html

Podrías tener un SQL así:
Código PHP:
$sql "SELECT DATE_FORMAT(ini_fec, '%d/%m/%Y %H:%i:%s') AS fecha_hora";
$sql.= ", DATE_FORMAT(ini_fec, '%d/%m/%Y) AS solo_fecha";
$sql.= ", HOUR(ini_fec) AS hora";
$sql.= ", MINUTE(ini_fec) AS minutos";
$sql.= ", MONTH(ini_fec) AS mes";
$sql.= " FROM tu_tabla";

//luego haces el query y extraes las filas. Y si quieres dentro del while...

echo 'fecha_hora: '.$row['fecha_hora'].'<br />';
echo 
'solo_fecha: '.$row['solo_fecha'].'<br />';
echo 
'hora: '.$row['hora'].'<br />';
echo 
'minutos: '.$row['minutos'].'<br />';
echo 
'mes: '.$row['mes'].'<br /><hr />'
Saludos

Última edición por jpinedo; 06/02/2005 a las 17:35
  #7 (permalink)  
Antiguo 07/02/2005, 18:43
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
ufff.. no me anda ni de casualidad =(
  #8 (permalink)  
Antiguo 07/02/2005, 18:50
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 20 años, 2 meses
Puntos: 0
Porque estoy seguro que ni reemplazaste ini_fec por tu campo y tu_tabla por tu tabla.
  #9 (permalink)  
Antiguo 07/02/2005, 18:53
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
si.. mi campo se llama ini_fec.... me comí mi tabla =/ jijiji
una preguntonta.. a variable $sql puede reemplazarce por $result ?
  #10 (permalink)  
Antiguo 07/02/2005, 19:00
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
igual.. no anda
  #11 (permalink)  
Antiguo 07/02/2005, 22:59
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Bueno... decior "no anda" no va a hacer que adivinemos todos tus problemas... o sea... va a ser muy difícil que alguien pueda ayudarte si no das más detalles.
Postea el código que utilizas, mensajes de error, etc.

Saludos
  #12 (permalink)  
Antiguo 08/02/2005, 02:57
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 4 meses
Puntos: 2
Listo chicos, les agradezco.. lo hice andar... me dicen si esta forma está "optimizada" o algo?

$result=mysql_query("select *, DATE_FORMAT(ini_fec,'%d/%m/%Y %H:%i') AS ini_fec_ from inicio order by id_ini desc limit 0,5",$link); }
while($row = mysql_fetch_array($result)) {

echo $row["ini_tit"];
echo $row["ini_fec_"];
echo nl2br($row["ini_tex"]);

gracias
  #13 (permalink)  
Antiguo 03/08/2008, 12:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: MySQL > datetime

puedes definir una funcion y llamarla cada vez que necesites

------- 1ra opcion ------- (simple)

definimos la funcion fechahora():

Código PHP:
function fechahora($valor){
$fechahora strftime ("%d-%m-%Y %H:%M:%S"strtotime($valor));
return (
$fechahora);
}; 
y cuando quieras mostrar el resultado

Código PHP:
echo fechahora($row["ini_fec_"]) 
------- 2da opcion ------- (rebuscada)

definimos la funcion fechahora():

Código PHP:
function fechahora($valor){
ereg"([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})"$valor$cambio);
$final $cambio[3] . "-" $cambio[2] . "-" $cambio[1] . " " $cambio[4] . ":" $cambio[5] . ":" $cambio[6];
return(
$final);
}; 
e igualmente cuando quieras mostrar el resultado

Código PHP:
echo fechahora($row["ini_fec_"]) 
Ambas funciones hacen lo mismo la diferencia esta en la forma de convertir los datos

Última edición por Egomanus; 03/08/2008 a las 13:47
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:23.