Foros del Web » Programando para Internet » PHP »

ordenar fechas con formato Lunes 00/00/0000

Estas en el tema de ordenar fechas con formato Lunes 00/00/0000 en el foro de PHP en Foros del Web. Buenas y santas. Tengo una base de datos mysql y estoy trabajando con php. La cuestion es que estoy rabeando con ordenar en sentido descendente ...
  #1 (permalink)  
Antiguo 31/03/2012, 07:53
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
ordenar fechas con formato Lunes 00/00/0000

Buenas y santas. Tengo una base de datos mysql y estoy trabajando con php. La cuestion es que estoy rabeando con ordenar en sentido descendente las fechas en formato Lunes 00/00/0000 que llamo de una consulta a la base de datos desde mi php. El campo de la bd se llama 'fecha' y esta en VARCHAR. He recorrido millones de foros pero no he logrado dar en la tecla. Por favor necesito una mano. Desde ya muchas gracias por todo lo que puedan hacer por mi.
  #2 (permalink)  
Antiguo 31/03/2012, 08:00
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 9 meses
Puntos: 139
Respuesta: ordenar fechas con formato Lunes 00/00/0000

No entiendo , pon un ejemplo mas claro de lo que andas buscando
  #3 (permalink)  
Antiguo 31/03/2012, 08:33
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: ordenar fechas con formato Lunes 00/00/0000

Discpulas si no he sido claro. Necesito basicamente a traves de una consulta que hago en mi php que seria mas o menos asi SELECT DISTINCT fecha FROM asistencia order by fecha desc poder ordenar las fechas que estan como VARCHAR en mi bd con el formato Lunes 00/00/0000. Como veran poniendo order by fecha desc me ordena cualquier cosa.

Por ej: la consulta la meto en un list option donde traigo las fechas de mi bd y tengo algo asi pero todo desordenado

Jueves 09/02/2012
Viernes 20/05/2012
Lunes 01/012012
Miecoles 03/01/2012
Martes 02/01/2012
Lunes 05/01/2012

la idea es poder ordenar las fechas de manera decreciente y que queden por ej asi:

Viernes 20/05/2012
Jueves 09/02/2012
Lunes 05/01/2012
Miecoles 03/01/2012
Martes 02/01/2012
Lunes 01/012012

Dejo una captura de imagen para que sea mas claro aun.

  #4 (permalink)  
Antiguo 31/03/2012, 08:34
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: ordenar fechas con formato Lunes 00/00/0000

  #5 (permalink)  
Antiguo 31/03/2012, 09:01
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 9 meses
Puntos: 139
Respuesta: ordenar fechas con formato Lunes 00/00/0000

Bueno mi recomendacion es la siguiente, te sugiero que trabajes con el tipo de datos correpodiente a fecha en la tabla de mysql
que seria DATE
el formato de fecha para la tabla de mysql es

Y-M-D
ej.
2012-03-31

Luego cuando recuperas esa informacion con esta consulta
Código:
SELECT fecha FROM asistencia group by fecha order by fecha desc
y en php

Código PHP:
Ver original
  1. # Fecha optenida de mysql ej.
  2. $fecha = "2012-03-31";
  3.  
  4. function getFecha($fecha) {
  5.     $dias = array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");
  6.     $f = explode("-",$fecha);
  7.     list($anio,$mes,$dia) = $f;
  8.      $formato =  $dia."/".$mes."/".$anio;
  9.      $dia = $dias[date("w", mktime(0, 0, 0, $f[1], $f[2], $f[0]))];
  10.     return $dia." ".$formato;
  11. }
  12.  
  13. echo getFecha($fecha);


Esta manera es optima de trabajar y te mantiene tus datos con sus formatos originales.
  #6 (permalink)  
Antiguo 03/04/2012, 06:41
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: ordenar fechas con formato Lunes 00/00/0000

Estimado gjx2 ha sido muy util tu respuesta pero no es la que en este momento me sirve. Tengo que tener si o si las fechas en el formato VARCHAR por que importo datos de otra base y con DATE
  #7 (permalink)  
Antiguo 03/04/2012, 06:44
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: ordenar fechas con formato Lunes 00/00/0000

Perdon aprete ENTER sin querer. Como decia con DATE me trae muchisimos problemas para importar datos de la otra bd que tambien tiene la fecha en formato VARCHAR. He leido en varios foros como hacer esto pero la verdad que no he prosperado.

Un abrazo y espero poder dar en la tecla.
  #8 (permalink)  
Antiguo 03/04/2012, 08:34
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 3 meses
Puntos: 89
Respuesta: ordenar fechas con formato Lunes 00/00/0000

No entiendo....

Queres que en ves de listar de esta manera:
Jueves 09/02/2012
Viernes 20/05/2012
Lunes 01/012012
Miecoles 03/01/2012
Martes 02/01/2012
Lunes 05/01/2012

Liste de esta otra:

Viernes 20/05/2012
Jueves 09/02/2012
Lunes 05/01/2012
Miecoles 03/01/2012
Martes 02/01/2012
Lunes 01/012012

Pero claro con una columna en DATE seria pan comido, pero vos usas VARCHAR...

Analicemos:

El nombre del dia no es un dato util para nuestro objetivo.
Por lo tanto para poder ordenar hay que desarmar todo.
Para empezar guardemos todos los resultados en un array:
Código PHP:
$r = array( //$r de Resultado
"Viernes 20/05/2012",
"Jueves 09/02/2012",
"Lunes 05/01/2012",
"Miecoles 03/01/2012",
"Martes 02/01/2012",
"Lunes 01/012012"); 
Ahora lo que tenemos que hacer es crear otro arreglo con los datos que podemos analizar con PHP, en este caso la FECHA pero en formato DATE.


Código PHP:
//declaro futuro arreglo.
$a = array(); // $a de Analizados.
for($i=0;$i<count($r);$i++){

$e explode(" ",$r[$i]); // separamos el dia con la fecha, nos interesa $e[1]

// ahora a la fecha con formato d/m/Y la modificamos para que sea Y-m-d.

$date substr($e[1],6,2)."-".substr($e[1],3,2)."-".substr($e[1],0,2);

// y lo guardamos en un nuevo arreglo.

$a []= $date;

Ahora tenemos el siguiente arreglo:

Código PHP:
$a = array( //$a de Analizados
"2012-05-20",
"2012-02-09",
"2012-01-05",
"2012-01-03",
"2012-01-02",
"2012-01-01"); 
Ahora con sort() ordenamos el arreglo.

Código PHP:
sort($a); 
ahora con un bucle devolvemos el resultado:

Código PHP:
for($i=0;$i<count($a);$i++){
$d=  date('w'strtotime($a[$i])); // $d de Dia
switch($dia){
case 
0
 
$dia "Domingo";
break;
case 
1:
 
$dia "Lunes";
break;
case 
2:
 
$dia "Martes";
break;
case 
3:
 
$dia "Miercoles";
break;
case 
4:
 
$dia "Jueves";
break;
case 
5:
 
$dia "Viernes";
break;
case 
6:
 
$dia "Sabado";
break;
default:
 die( 
"Error formato fecha" );
break;
}

echo 
$dia." ".date("d/m/Y",strtotime($a[$i]))."<br>";

Despues contanos.

NOTA: fijate lo complejo que puede ser esto, solo por que un programador decidio guardar una fecha en un formato inapropiado.
__________________
Mono programando!
twitter.com/eguimariano
  #9 (permalink)  
Antiguo 29/04/2012, 16:49
Avatar de BLAH !!  
Fecha de Ingreso: septiembre-2003
Ubicación: Región Metropolitana, Santiago, Chile
Mensajes: 706
Antigüedad: 20 años, 7 meses
Puntos: 16
Respuesta: ordenar fechas con formato Lunes 00/00/0000

http://blog.victormanuel.info/ordena...-campo-varchar

buscaba lo mismo y mira lo que encontre ojala te sirva.
__________________
Adios ...!!!!

Etiquetas: formato, lunes, mysql
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 04:09.