Подсчет времени чтения статьи на PHP
Иногда, оказывается довольно полезным отображать время чтения какой-либо статьи или текста. Особенно это интересно будет для блогов и новостных сайтов.
Так вот, оказывается, произвести сам подсчет времени чтения — задача не сложная.
Например, скорость чтения диктора зависит от его индивидуальных особенностей и текста: жанра, подачи и интонирования. Согласно отраслевым стандартам средняя скорость дикторской подачи составляет порядка 130 слов в минуту.
Однако, обычные люди читают текст гораздо медленнее, чем профессиональные дикторы.
При разработке класса для подсчета времени чтения статьи я использовал константное значение, которое равняется 200 словам в минуту. Дополнительно класс вырезает все HTML-теги.
Сам класс можете увидеть ниже. Все довольно просто и не требует более детального объяснения.
/** * Class readTimeEstimate * Подсчет времени чтения статьи */ class readTimeEstimate { /** * Средняя скорость чтения слов в минуту */ const WORDS_PER_MINUTE = 200; const STR_MINUTE = 'мин.'; const STR_SECOND = 'сек.'; private $minutes; private $seconds; /** * readTimeEstimate constructor. * @param string $str */ function __construct(string $str) { $wordCount = $this->wordCount(strip_tags($str)); $this->minutes = floor($wordCount / static::WORDS_PER_MINUTE); $this->seconds = floor($wordCount % static::WORDS_PER_MINUTE / (static::WORDS_PER_MINUTE / 60)); } /** * @return string */ public function __toString(): string { return ($this->minutes == 0) ? $this->seconds . ' ' . static::STR_MINUTE : $this->minutes . ' ' . static::STR_MINUTE . ', ' . $this->seconds . ' ' . static::STR_SECOND; } /** * @return float */ public function getMinutes(): float { return $this->minutes; } /** * @return float */ public function getSeconds(): float { return $this->seconds; } /** * @param string $str * @return int */ protected function wordCount(string $str): int { $v = preg_split('/\W+/u', $str, -1, PREG_SPLIT_NO_EMPTY); return count($v); } }
А еще для удобства разместил данный класс на гитхабе.
Всем спасибо за внимание.