我们在一些网站和微信公众号文章中都有看到过阅读时间,可以让读者更加方便地了解文章的长度。那么如何来实现这个功能呢?
如何计算阅读时间
一般来说,阅读时长和文章长度及阅读速度有关,文章内容和与读者水平都会影响阅读速度。但对于博客和公众号文章说,内容基本是以文字为主。所以,一个简单的计算公式:
阅读时间 = 字数 / 每分钟阅读的字数
JavaScript实现
/**
* 从内容中提取汉字
* @param content
* @returns {*}
*/
function getChinese(content){
//RegExpMatchArray | null
return content.match(/[\u4E00-\u9FD5]/gu);
}
/**
* 从内容中提取拉丁文单词
* @param content
* @returns {*}
*/
function getWords(content){
// \u00C0-\u024F 是拉丁语增补字母,可能用于法语等语言
// \u0400-\u04FF 是拉丁语增补字母,可能用于法语西里尔字母等语言,用于俄语
// . @ / 添加以确保电子邮件和URL不被拆分
// RegExpMatchArray | null
return content.match(/[\w\d\s\u00C0-\u024F\u0400-\u04FF.@/]+/giu);
}
/**
* 计算内容字数
* @param content
* @returns {*}
*/
function getWordNumber(content) {
return (getWords(content)?.reduce(
(accumulator, word) =>
accumulator + (word.trim() === "" ? 0 : word.trim().split(/\s+/u).length),
0,
) || 0) + (getChinese(content)?.length || 0);
}
/**
*计算阅读时间
* @param content
* @param wordsPerMinute
* @returns {{minutes: number, words: *}}
*/
function getReadingTime (content,wordsPerMinute = 300) {
const words = getWordNumber(content || "");
return {
minutes: Math.round((words / wordsPerMinute) * 100) / 100,
words,
};
}