2009-06-25 19 views
6

Sto provando a fare un po 'di matematica usando le date in PHP. Sto modificando una shoutbox e voglio implementare la seguente funzionalità.Data PHP Domanda


Se la data post = oggi, e ora di invio

altro ritorno se la data = ieri, ritorno "ieri"

data altra cosa = X giorni fa


Come sarebbe Uso le funzioni di data di php per calcolare quanti giorni fa un timestamp è (il timestamp è formattato in UNIX)

risposta

8

Prova questo:

$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

perfetto. grazie mille –

3

In php 5.3.0 o versioni successive, è possibile utilizzare DateTime::diff (aka date_diff()).

In praticamente qualsiasi php, è possibile convertire le date in timestamp Unix e dividere la differenza tra loro per 86400 (1 giorno in secondi).

+0

Non dimenticate che PHP 5.3 non è ancora fuori (a partire da giugno 2009) – Greg

0

classe Uso DateTime e quindi di avere un metodo diff.

0

Provare a utilizzare date_parse.
Dal manuale:

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

stamperà

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

Utilizzare il fatto che i tempi sono memorizzati in secondi:

$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

io non credo che sia stato sottolineato che si possibile utilizzare strtotime per ottenere "Ieri". Rende più leggibile (e più facile da ricordare) rispetto al calcolo delle date "a mano" ed è probabilmente meno incline agli errori.

$ int = strtotime ('Yesterday');


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."; 
}