Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

Estas en el tema de Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc. en el foro de PHP en Foros del Web. Tengo una lista con 4 columnas, id, nombre apellido fecha_alta en una bbdd EJ: 1 - Pepe - Morales - 24/03/2015 12:12:12 Quisiera que el ...
  #1 (permalink)  
Antiguo 06/03/2015, 08:13
 
Fecha de Ingreso: abril-2001
Ubicación: Argentina
Mensajes: 67
Antigüedad: 23 años, 1 mes
Puntos: 0
Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

Tengo una lista con 4 columnas, id, nombre apellido fecha_alta en una bbdd

EJ:

1 - Pepe - Morales - 24/03/2015 12:12:12


Quisiera que el campo fecha me pusiera textos del tipo

Hoy, Ayer, Hace 3 dias, 1 semana etc.

Hay alguna funcion x ahi dando vueltas???

O alguien podria mostrarme la luz a la solucion!

Gracias
__________________
Saludos!
  #2 (permalink)  
Antiguo 06/03/2015, 08:27
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

Tienes que hacer la diferencia del día en curso con lo que tienes en la base de datos. Esta diferencia la puedes calcular desde el gesto o desde php. Ya lo demás es que muestres la diferencia como lo requieras
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 06/03/2015, 08:40
 
Fecha de Ingreso: abril-2001
Ubicación: Argentina
Mensajes: 67
Antigüedad: 23 años, 1 mes
Puntos: 0
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

SELECT id_usuario, nombre, apellido, DATEDIFF(NOW(),fecha_alta)as dadodealta_hace from usuarios;

Algo asi y luego una funcion por ejemplo que si da resultado:
1 (Ayer)
0 (Hoy)
7 (hace 1 semana)

Voy bien encaminado?
__________________
Saludos!
  #4 (permalink)  
Antiguo 06/03/2015, 08:57
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

Es correcto ya solo tienes que calcular la equivalencia en días para los meses y años, etc
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 07/03/2015, 15:51
 
Fecha de Ingreso: abril-2001
Ubicación: Argentina
Mensajes: 67
Antigüedad: 23 años, 1 mes
Puntos: 0
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

y si quiero que me devuelva el valor en minutos? como seria, ando algo crudo con las querys ultimamente.
__________________
Saludos!
  #6 (permalink)  
Antiguo 07/03/2015, 16:59
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

la función ya te devuelve en minutos
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 08/03/2015, 12:01
 
Fecha de Ingreso: abril-2001
Ubicación: Argentina
Mensajes: 67
Antigüedad: 23 años, 1 mes
Puntos: 0
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

No solo me esta devolviendo dias 0 1 2 3 4 5 6

He intentado esto que lo encontre por google pero no me va:

Código PHP:
function hace($timestamp)
{
    
$diferencia time() - $timestamp;
    if(
$diferencia 0)
    {
        
$periodo = array("seg""min""hora""dia""semana""mes" "año""decada");
        
$longitud = array(    "60" ,"60"  "24" ,  "7"  "4.35",   "12" "10" );
 
        for(
$j 0$diferencia >= $longitud[$j]; $j++)
            
$diferencia /= $longitud[$j];
 
        
$diferencia round($diferencia);
 
        if(
$diferencia != 1)
        {
            if(
$periodo[$j] == "mes")
                
$periodo[$j].= "es";
            else
                
$periodo[$j].= "s";
        }
 
        return 
"Hace ".$diferencia." ".$periodo[$j];
    }
    else
    {
        return 
"Ahora mismo";
    }

He cambiado el tipo de dato en la bbdd a timestamp

y el error que me devuelve es el siguiente ESTAN COMENTADOS:

Código PHP:
function hace($timestamp)
{
    
$diferencia time() - $timestamp;
    if(
$diferencia 0)
    {
        
$periodo = array("seg""min""hora""dia""semana""mes" "año""decada");
        
$longitud = array(    "60" ,"60"  "24" ,  "7"  "4.35",   "12" "10" );
 
        for(
$j 0$diferencia >= $longitud[$j]; $j++) //NOTICE: UNDEFINED OFFSET
            
$diferencia /= $longitud[$j]; //NOTICE: UNDEFINED OFFSET y WARNING: Division By Zero
 
        
$diferencia round($diferencia); 
 
        if(
$diferencia != 1)
        {
            if(
$periodo[$j] == "mes")
                
$periodo[$j].= "es";
            else
                
$periodo[$j].= "s";
        }
 
        return 
"Hace ".$diferencia." ".$periodo[$j];
    }
    else
    {
        return 
"Ahora mismo";
    }

__________________
Saludos!

Última edición por [^_WebMaster^_]; 08/03/2015 a las 12:09
  #8 (permalink)  
Antiguo 08/03/2015, 12:53
 
Fecha de Ingreso: abril-2001
Ubicación: Argentina
Mensajes: 67
Antigüedad: 23 años, 1 mes
Puntos: 0
Respuesta: Reemplazar campo fecha por Hoy Ayer, hace 3 dias, 1 semana, etc.

Que se detenga el planeta, ya casi lo tengo... llevandome del codigo que encontre en google creo que ya...

Lo posteo para el que lo necesite...

Código PHP:
function HaceTiempo($valor_fecha){
$tiempo_actual     time();
$valor_hace_time strtotime($valor_fecha);
$tiempo_transcurrido     $tiempo_actual $valor_hace_time;
$segundos     $tiempo_transcurrido ;
$minutos     round($tiempo_transcurrido 60 );
$horas     round($tiempo_transcurrido 3600);
$dias     round($tiempo_transcurrido 86400 );
$semanas     round($tiempo_transcurrido 604800);
$meses     round($tiempo_transcurrido 2600640 );
$anios     round($tiempo_transcurrido 31207680 );

// En Segundos (AHORA)
if($segundos <= 60){
    return 
"Ahora mismo";
}
//En Minutos
else if($minutos <=60){
    if(
$minutos==1){
        return 
"Hace 1 Minuto";
    }
    else{
        return 
"Hace $minutos minutos";
    }
}
//En Horas
else if($horas <=24){
    if(
$horas==1){
        return 
"Hace 1 hora";
    }else{
        return 
"Hace $horas horas";
    }
}
//En Dias
else if($dias <= 7){
    if(
$dias==1){
        return 
"Ayer";
    }else{
        return 
"Hace $dias días";
    }
}
//En Semanas
else if($semanas <= 4.3){
    if(
$semanas==1){
        return 
"Hace 1 Semana";
    }else{
        return 
"Hace $semanas semanas";
    }
}
//En Meses
else if($meses <=12){
    if(
$meses==1){
        return 
"Hace 1 Mes";
    }else{
        return 
"Hace $meses meses";
    }
}
// En Años
else{
    if(
$anios==1){
        return 
"Hace 1 año";
    }else{
        return 
"Hace $anios años";
    }
}

__________________
Saludos!

Etiquetas: campo, dias, fecha, reemplazar, semana
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 07:37.