Mysql
 sql >> база данни >  >> RDS >> Mysql

изчисляване и показване на дата като „преди секунди“, „преди минути“, „преди часове“ и т.н.

Можете да използвате следната функция и да я извикате като format_interval(time() - $saved_timestamp) , където $saved_timestamp е времевата марка на „събитието“, което ви интересува. (Следният код е лицензиран под GNU General Public License v2 или последователен .)

function format_interval($interval, $granularity = 2) {
  $units = array('1 year|@count years' => 31536000, '1 week|@count weeks' => 604800, '1 day|@count days' => 86400, '1 hour|@count hours' => 3600, '1 min|@count min' => 60, '1 sec|@count sec' => 1);
  $output = '';
  foreach ($units as $key => $value) {
    $key = explode('|', $key);
    if ($interval >= $value) {
      $floor = floor($interval / $value);
      $output .= ($output ? ' ' : '') . ($floor == 1 ? $key[0] : str_replace('@count', $floor, $key[1]));
      $interval %= $value;
      $granularity--;
    }

    if ($granularity == 0) {
      break;
    }
  }

  return $output ? $output : '0 sec';
}

$granularity е броят на различните единици за показване. Например, format_interval(32745600) ще върне "1 year 2 weeks" .

Кодът, който показвам, е намалена версия на format_interval() който идва с Drupal 7, който е код, разпространяван под GNU General Public License v2 или последователен Разрешително. (Вижте също COPYRIGHT.txt )
Премахнах частта, която е много специфична за Drupal, и оставих кода, който използва обикновени PHP функции.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql след тригер за вмъкване, който актуализира колоната на друга таблица

  2. Извличането на PDO връща само първия ред

  3. MySQL изтрива дублиращи се записи, но запазва най-новите

  4. GROUP BY поведение, когато в клаузата SELECT не присъстват агрегатни функции

  5. MySql не може да актуализира родителския ред, когато имам ON UPDATE CASCADE