diff options
Diffstat (limited to 'src/utils/helpers/reading-time.ts')
| -rw-r--r-- | src/utils/helpers/reading-time.ts | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/utils/helpers/reading-time.ts b/src/utils/helpers/reading-time.ts new file mode 100644 index 0000000..6cdeba4 --- /dev/null +++ b/src/utils/helpers/reading-time.ts @@ -0,0 +1,46 @@ +export type GetReadingTimeReturn = { + /** + * The reading time rounded to minutes. + */ + inMinutes: () => number; + /** + * The reading time in minutes and seconds. + */ + inMinutesAndSeconds: () => { + minutes: number; + seconds: number; + }; +}; + +/** + * Retrieve the reading time from a words count. + * + * @param {number} wordsCount - The number of words. + * @param {number} [wordsPerMinute] - How many words can we read per minute? + * @returns {GetReadingTimeReturn} Two methods to retrieve the reading time. + */ +export const getReadingTimeFrom = ( + wordsCount: number, + wordsPerMinute = 245 +): GetReadingTimeReturn => { + const ONE_MINUTE_IN_SECONDS = 60; + const wordsPerSecond = wordsPerMinute / ONE_MINUTE_IN_SECONDS; + const estimatedTimeInSeconds = wordsCount / wordsPerSecond; + + return { + inMinutes: () => Math.round(estimatedTimeInSeconds / ONE_MINUTE_IN_SECONDS), + inMinutesAndSeconds: () => { + const estimatedTimeInMinutes = Math.floor( + estimatedTimeInSeconds / ONE_MINUTE_IN_SECONDS + ); + + return { + minutes: estimatedTimeInMinutes, + seconds: Math.round( + estimatedTimeInSeconds - + estimatedTimeInMinutes * ONE_MINUTE_IN_SECONDS + ), + }; + }, + }; +}; |
