Foros del Web » Programando para Internet » PHP »

explode !!!

Estas en el tema de explode !!! en el foro de PHP en Foros del Web. En mi BD tengo un campo de tipo varchar donde inserto la hora de esta forma: Código PHP:  date ( "g:i a" )  pues con esto ...
  #1 (permalink)  
Antiguo 28/03/2004, 23:14
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
explode !!!

En mi BD tengo un campo de tipo varchar donde inserto la hora de esta forma:
Código PHP:
 date("g:i a"
pues con esto tengo la hora en este formato: 05:38 pm por ejemplo. Ahora mi pregunta es como con explode puedo acceder al pm o am. Lo he hecho de esta forma para las horas y minutos:
Código PHP:
  echo "<td class='txtrg'>Hora de Registro: </td>
                <td><select name='hora' id='hora' size='1' class=txt>"
;
                list(
$hour,$minutes,$ampm)=explode(":",$row['horaderegistro']);
                for(
$i=1;$i<13;$i++){
                 if(
$hour==$i){
                  echo 
"<option value='".$i."' selected>".$i."</option>";
                 }else{
                  echo 
"<option value='".$i."'>".$i."</option>";
                 }
                }
                echo 
"</select>
                <select name='minutos' id='minutos' size='1' class=txt>"
;
                for(
$i=1;$i<61;$i++){
                 if(
$minutes==$i){
                  if((
$minutes>1)&&($minutes<10)){
                  
$an="0";
                  }
                  echo 
"<option value='".$i."' selected>".$an."".$i."</option>";
                 }else{
                  echo 
"<option value='".$i."'>".$an."".$i."</option>";
                 }
                 }
                echo 
"</select>
                <select name='ampm' id='ampm' size='1' class=txt>"
;
                
$arrampm=array("am","pm");
                for(
$i=1;$i<3;$i++){
                 if(
$ampm == $i){
                  echo 
"<option value='".$i."' selected>".$arrampm[$i]."</option>";
                 }
                }
                echo 
"</select></td>"
pero no se como hacer para poner en un select el valor de am o pm segun tenga la hora.

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 28/03/2004 a las 23:16
  #2 (permalink)  
Antiguo 29/03/2004, 06:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Trabaja las horas en tus BD en formato TIME ... DATETIME o DATE y dales formato que necesites con la función de Mysql: DATE_FORMAT()

También tienes otras funciones de Msyql para obtener una parte de tu fecha .. ejemplo la hora, el dia, etc ... (aparte de que con DATE_FORMAT() puedes hacerlo todo .. se usa casi igual que date() de PHP ..)

Si trabajas las fechas en campos de fecha verás que todo se hace más fácil operar con fechas (restas .. calculo de dias transcurridos y demás operaciones con fechas). Y lo mejor de todo que será más optimo que meter "php" por médio cuando es un proceso que puedes hacer directamente sobre Mysql en su SQL.

Revisa:
http://www.mysql.com/doc/en/Date_and...functions.html

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 29/03/2004, 12:01
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Sip pero

Pero Cluster en ese formato también puedo almacenar el am y el pm?
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 29/03/2004, 12:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, es decir .. la fecha y hora se almacena en formato 24 horas (en un campo DATETIME o TIME) . .pero con DATE_FORMAT() puedes obtener tus horas en formato AM/PM si lo deseas ...

Revisastes el link de la documentación de Msyql que te dejé?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 29/03/2004, 12:11
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Nop

No Cluster no lo había revisado pero no te preocupes que ahora mismo lo hago.
Salu2
__________________
Ing. Reynier Pérez Mira
  #6 (permalink)  
Antiguo 30/03/2004, 20:08
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues mira

Cluster estuve indagando y leyendo acerca de las funciones que me diste pero tengo dos dudas con esta: DATE_FORMAT
Mi consulta la hago normal:
Código PHP:
 $query mysql_query("SELECT DATE_FORMAT('fechaderegistro','%H:%i:%s') FROM tabla"); 
ahora como muestro ese resultado como un dato al igual que hago con mysql_fetch_array? Y la otra cuando lo hago de esta forma:
Código PHP:
 $query mysql_query("SELECT DATE_FORMAT('fechaderegistro','%H:%i:%s %p') FROM tabla"); 
siempre me devuelve AM si es de dia y PM si es de noche y no es eso lo que yo quiero.

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 30/03/2004 a las 20:09
  #7 (permalink)  
Antiguo 30/03/2004, 20:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Puedes usar alias para obtener tu fecha (la que has formateado con DATE_FORMAT() ..) para usarlo como si de otro campo cualquiera de tu BD se tratase y así usar el tìpico "row['nombre']

Código PHP:
$query mysql_query("SELECT DATE_FORMAT(fechaderegistro,'%H:%i:%s') as tu_fecha FROM tabla"); 
A todo esto .. las llamadas a campos de tu BD no se usan ' comillas ' ... ya que sino serían interpretados como cadenas (strings).

Código PHP:
$row=mysql_fetch_array($query);
// así accedes por el nombre del alias creado al resultado de aplicar tu función ..
echo $row['tu_fecha']; 

Esto no lo entendí:
Cita:
siempre me devuelve AM si es de dia y PM si es de noche y no es eso lo que yo quiero.
Entonces? .... que es lo que quieres. Ten encuenta que tu campo de fecha (fechaderegistro) debe ser un campo tipo DATETIME o TIME (depende si quieres guardar fecha y hora, que puedes hacerlo en un sólo campo .. o sólo la hora completa ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 30/03/2004, 20:48
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Mas o menos te entendi

Cluster entendi lo del alias no se me había ocurrido, upsss y eso que di una asignatura en la Universidad el semestre pasado que se llama SIstemas de Bases de Datos(esto es entre nos-si el profe me ve me quita el 5 obtenido). Ahora a lo que me refería con el AM o PM es que siempre que la hora de mi PC esta de las 00:00 a las 12:00 pm entonces esa consulta me devuelve AM y si esta entre las 13:00 y las 24:00 me devuelve PM. Me entiendes ahora? Pues lo que quiero es saber a que hora el usuario se registro en mi sitio. Los campos los he puesto de tipo datetime y ahora tienen este formato "0000-00-00 00:00:00".

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 31/03/2004, 04:25
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
AM significa Antes de Mediodia y PM Pasado Mediodia, entonces todo lo que este entre las 00:00 y las 12:00 es AM y lo que esté entre las 12:00 y las 23:59 es PM
  #10 (permalink)  
Antiguo 31/03/2004, 06:50
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Si claro

Eso lo sabía (el que no lo sepa que se ahorque) pero la cosa es que esa función me saca los datos de acuerdo a la hora de mi PC y eso no es lo que quiero.

Salu2
__________________
Ing. Reynier Pérez Mira
  #11 (permalink)  
Antiguo 31/03/2004, 06:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues no sé que estaras haciendo (aquí toca ya que pongas el código completo que usas ..) por qué .. DATE_FORMAT() aplica la función sobre el campo que especifiques y si ahí tienes una fecha ya guardad así la formateará como corresponda ..

O a caso si muestras el valor de ese campo (sin DATE_FORMAT()) te dá la fecha actual/hora actual? .. acaso estás actualizando ese campo constantemente o al ingresar a tu sistema ?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 31/03/2004, 07:03
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
No ...

En ningún momento actualizo ese dato. Solo se inserta cuando el usuario se registra. Ahora lo que me pasa es que mi campo esta en formato datetime como me dijiste es decir, 0000-00-00 00:00:00 pero no me devuelve si el usuario se registro de dia o de noche,es decir, no me dice el horario real de registro del usuario sino el de mi PC. Me hago entender?

Este es el codigo que estoy usando:
Código PHP:
$query mysql_query("SELECT DATE_FORMAT(fechaderegistro,'%H:%i:%s%p') as tu_fecha FROM tabla"); 
ahora si mi PC tiene la hora de esta forma 07:56 am
entonces me devuelve la hora de registro del usuario es decir:
05:38 am
cuando en realidad fue 05:38 pm.

Salu2
__________________
Ing. Reynier Pérez Mira
  #13 (permalink)  
Antiguo 31/03/2004, 07:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero a ver ..

¿ Tu campo fechaderegistro que fecha tiene ahí guardada (cualquiera .. ) ?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 31/03/2004, 07:20
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Mira ...

Te voy a explicar como funciona eso. Tengo un formulario para registrar los usuarios en mi sitio. Ahora el action de ese formulario va sobre otra página. El código que ejecuta esta es este:
Código PHP:
if((isset($action))&&($action=="newuser")){
     
$pass md5($_POST['passwd01']);
     
$fechadenacimiento $_POST['year']."-".$_POST['mes']."-".$_POST['dia'];
     
$fechaderegistro date("Y/m/d g:i");
     
$result "INSERT INTO usuario(nombre,correoelectronico,login,passwdnrm,passwdenc,showmail,icq,yim,msn,aim,sexo,provincia,fechadenacimiento,fechaderegistro,tipo,activo) VALUES('".$_POST['nombre']."','".$_POST['email']."','".$_POST['login']."','".$_POST['passwd01']."','".$pass."','".$_POST['showmail']."','".$_POST['icq']."','".$_POST['yim']."','".$_POST['msn']."','".$_POST['aim']."','".$_POST['sexo']."','".$_POST['provincia']."','".$fechadenacimiento."','".$fechaderegistro."','4','0')";
     if(
mysql_query($result)){
         
logs("log","a",$result);
         
redirect("Registro satisfactorio","1","index.php?action=newuser&completed=true","El usuario ha sido agregado ... Dentro de breves instantes se le mandara un e-mail con un link para activar su cuenta de usuario");
     }else{
         
$error mysql_error();
         
logs("err","a",$result."-".$error);
         
redirect("Registro no concluido","3","javascript:history.go(-1)","El usuario no ha sido agregado ... Corrija los datos y vuelva a intentarlo");
     }
 } 
esa es la fecha que se me inserta en este campo es decir esta:
$fechaderegistro = date("Y/m/d g:i");

ahora me entiendes?

Salu2
__________________
Ing. Reynier Pérez Mira
  #15 (permalink)  
Antiguo 31/03/2004, 07:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te deciá en anteriores mensajes que Msyql dispone de la función NOW() para entragar la fecha/hora actual del servidor . .sin tener que pasar por el "date()" de PHP ..


Código PHP:
//     $fechaderegistro = date("Y/m/d g:i");  // <-- NO hace falta ..
     
$result "INSERT INTO  usuario(nombre,correoelectronico,login,passwdnrm,p asswdenc,showmail,icq,yim,msn,aim,sexo,provincia,fechadenacimiento,fechaderegistro,tipo,activo) VALUES('".$_POST['nombre']."','".$_POST['email']."','".$_POST['login']."','".$_POST['passwd01']."','".$pass."','".$_POST['showmail']."','".$_POST['icq']."','".$_POST['yim']."','".$_POST['msn']."','".$_POST['aim']."','".$_POST['sexo']."','".$_POST['provincia']."','".$fechadenacimiento."',NOW(),'4','0')";
     if(
mysql_query($result)){ 
También te comenté y has visto que tus fechas de campos DATETIME son YYYY-MM-DD HH:MM:SS y tu con el date() y el formato que le has dado es de 12 Horas para la fecha y no de 24 horas como ya te mencioné que así guarda y debes formar tu formato de hora si ingresas fechas/horas de forma manual ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 01/04/2004, 19:05
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Mira Cluster

Ya puse como me decías a insertar las cosas con la función NOW() de MySQL pero ahora mi duda esta en como puedo devolver la fecha en formato:
Jueves 1 de Abril del 2004
05:48:07 pm

Ya lo probe con la sintaxis que me distes y todo OK pero en este formato: Thursday April 2004 12:03:20 PM

El código es este:
Código PHP:
................
$quer mysql_query("SELECT DATE_FORMAT(fechaderegistro,'%W %M %Y %r') AS hms FROM usuario WHERE idusuario='".$_GET['idusuario']."'");
$hms mysql_fetch_assoc($quer);

echo 
"<td class=txt>".$dma['dma']."</td>";
................ 
Salu2
__________________
Ing. Reynier Pérez Mira
  #17 (permalink)  
Antiguo 01/04/2004, 20:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, ... pues eso ya no lo hace Mysql en su SQL . sino con PHP ..

Usa arrays para tus dias de la semana (Lunes, martes ...) y para los meses .. Obten con DATEFORMAT() tu fecha en formato que gustes .. a ser posible sin 0 a la izquierda (1/6/2004 .. tipo) y ahí desglosa tu fecha por el separador que uses (/ - ... ) con explode para usarlo como indices de tus arrays de dias de la semana y meses.

(no sé si en las FAQ's hay ejemplos .. pero de vez en cuando sale algún ejemplo así .. usa el buscador a ver que tal..)

Un saludo,

PD: aprendistes a usar campos de fechas en Mysql .. lo cual no está de más .. pero si desde un primer momento hubieras descrito que formato exacto de fecha necesitabas ya estaría resuelto el tema hace unos cuantos mensajes .. Intenta especificar mejor para otra vez.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 00:34.