The function issues "1 day 7 hours 1 minute 32 seconds ago." How to make it so that if 1 day (24 hours) has passed, then the conclusion is "1 day ago."; if a week has passed then "1 week ago" ...
In short, if one day has not passed, let him print "7 hours 1 minute 32 seconds ago"; if it was "1 day ago," "2 weeks ago," etc. ....
function showDate( $date ) // $date --> время в формате Unix time { $stf = 0; $cur_time = time(); $diff = $cur_time - $date; $seconds = array( 'секунда', 'секунды', 'секунд' ); $minutes = array( 'минута', 'минуты', 'минут' ); $hours = array( 'час', 'часа', 'часов' ); $days = array( 'день', 'дня', 'дней' ); $weeks = array( 'неделя', 'недели', 'недель' ); $months = array( 'месяц', 'месяца', 'месяцев' ); $years = array( 'год', 'года', 'лет' ); $decades = array( 'десятилетие', 'десятилетия', 'десятилетий' ); $phrase = array( $seconds, $minutes, $hours, $days, $weeks, $months, $years, $decades ); $length = array( 1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600 ); for ( $i = sizeof( $length ) - 1; ( $i >= 0 ) && ( ( $no = $diff / $length[ $i ] ) <= 1 ); $i -- ) { ; } if ( $i < 0 ) { $i = 0; } $_time = $cur_time - ( $diff % $length[ $i ] ); $no = floor( $no ); $value = sprintf( "%d %s ", $no, getPhrase( $no, $phrase[ $i ] ) ); $value = ''; for (; $i >= 0; $diff %= $length[$i--]) { $no = floor($diff / $length[$i]); $value .= sprintf("%d %s ", $no, getPhrase($no, $phrase[$i])); } return $value . ' назад'; } function getPhrase( $number, $titles ) { $cases = array( 2, 0, 1, 1, 1, 2 ); return $titles[ ( $number % 100 > 4 && $number % 100 < 20 ) ? 2 : $cases[ min( $number % 10, 5 ) ] ]; }
time()-10000perfectly gives out '2 hours 46 minutes 40 seconds ago'. As if everything is correct, one day did not pass, and she issued it from the clock - Mike