1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
import { useIntl } from 'react-intl';
/**
* Retrieve the estimated reading time by words count.
*
* @param {number} wordsCount - The number of words.
* @returns {string} The estimated reading time.
*/
export const useReadingTime = (
wordsCount: number,
onlyMinutes: boolean = false
): string => {
const intl = useIntl();
const wordsPerMinute = 245;
const wordsPerSecond = wordsPerMinute / 60;
const estimatedTimeInSeconds = wordsCount / wordsPerSecond;
if (onlyMinutes) {
const estimatedTimeInMinutes = Math.round(estimatedTimeInSeconds / 60);
return intl.formatMessage(
{
defaultMessage: '{minutesCount} minutes',
description: 'useReadingTime: rounded minutes count',
id: 's1i43J',
},
{ minutesCount: estimatedTimeInMinutes }
);
} else {
const estimatedTimeInMinutes = Math.floor(estimatedTimeInSeconds / 60);
if (estimatedTimeInMinutes <= 0) {
return intl.formatMessage(
{
defaultMessage: '{count} seconds',
description: 'useReadingTime: seconds count',
id: 'i7Wq3G',
},
{ count: estimatedTimeInSeconds.toFixed(0) }
);
}
const remainingSeconds = Math.round(
estimatedTimeInSeconds - estimatedTimeInMinutes * 60
).toFixed(0);
return intl.formatMessage(
{
defaultMessage: '{minutesCount} minutes {secondsCount} seconds',
description: 'useReadingTime: minutes + seconds count',
id: 'OevMeU',
},
{ minutesCount: estimatedTimeInMinutes, secondsCount: remainingSeconds }
);
}
};
|