2009-06-25 13 views
6

Estoy tratando de hacer un poco de matemática usando fechas en PHP. Estoy modificando un shoutbox, y quiero implementar la siguiente funcionalidad.PHP Fecha Pregunta


Si fecha = hoy, el tiempo de la post

o regrese si la fecha = ayer, retorno "ayer"

fecha demás = X hace días


¿Cómo lo haría Uso las funciones de fecha de php para calcular cuántos días hace una marca de tiempo (la fecha y hora está formateada en tiempo UNIX)

Respuesta

8

Prueba esto:

$shoutDate = date('Y-m-d', $shoutTime); 
if ($shoutDate == date('Y-m-d')) 
    return date('H:i', $shoutTime); 

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')))) 
    return 'yesterday'; 

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago'; 
+0

perfecto. gracias un montón –

3

En php 5.3.0 o superior, puede usar DateTime::diff (también conocido como date_diff()).

En prácticamente cualquier php, puede convertir las fechas a marcas de tiempo Unix y dividir la diferencia entre ellas por 86400 (1 día en segundos).

+0

No se olvide que PHP 5.3 aún no ha salido (en junio de 2009) – Greg

0

clase DateTime Uso y entonces usted tiene un método diff.

0

Pruebe usar date_parse.
Del manual:

<?php 
print_r(date_parse("2006-12-12 10:00:00.5")); 
?> 

imprimirá

Array 
(
    [year] => 2006 
    [month] => 12 
    [day] => 12 
    [hour] => 10 
    [minute] => 0 
    [second] => 0 
    [fraction] => 0.5 
    [warning_count] => 0 
    [warnings] => Array() 
    [error_count] => 0 
    [errors] => Array() 
    [is_localtime] => 
) 
3

utilizar el hecho de que los tiempos se almacenan en segundos:

$days = floor(($shoutTime - time())/86400) + 1; // 86400 = 24*60*60 

switch ($days) { 
    case 0: 
    return date('H:i', $shoutTime); 
    case -1: 
    return 'yesterday'; 
    case 1: 
    return 'tomorrow'; 
} 

return "$days ago"; 
1

no creo que ha sido señaló que se puede usar strtotime para obtener "Ayer". Lo hace más legible (y más fácil de recordar) que el cálculo de fechas "a mano" y es probable que también sea menos propenso a errores.

$ int = strtotime ('Ayer');


if(date('Y-m-d', $shoutTime) == date('Y-m-d') { 
    return date('H:i:s', $shouTime); 
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) { 
    return "Yesterday."; 
} else { 
    $days = floor($shoutTime - time()/86400); 
    return "$days ago."; 
}