UNPKG

youtube-duration-format

Version:

Format the duration returned by google youtube data api as human understandable

60 lines (56 loc) 1.35 kB
'use strict'; function parseDuration(PT, format) { var output = []; var durationInSec = 0; var matches = PT.match(/P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)W)?(?:(\d*)D)?T?(?:(\d*)H)?(?:(\d*)M)?(?:(\d*)S)?/i); var parts = [ { // years pos: 1, multiplier: 86400 * 365 }, { // months pos: 2, multiplier: 86400 * 30 }, { // weeks pos: 3, multiplier: 604800 }, { // days pos: 4, multiplier: 86400 }, { // hours pos: 5, multiplier: 3600 }, { // minutes pos: 6, multiplier: 60 }, { // seconds pos: 7, multiplier: 1 } ]; for (var i = 0; i < parts.length; i++) { if (typeof matches[parts[i].pos] != 'undefined') { durationInSec += parseInt(matches[parts[i].pos]) * parts[i].multiplier; } } var totalSec = durationInSec; // Hours extraction if (durationInSec > 3599) { output.push(parseInt(durationInSec / 3600)); durationInSec %= 3600; } // Minutes extraction with leading zero output.push(('0' + parseInt(durationInSec / 60)).slice(-2)); // Seconds extraction with leading zero output.push(('0' + durationInSec % 60).slice(-2)); if (format === undefined) return output.join(':'); else if (format === 'sec') return totalSec; }; module.exports = parseDuration;