UNPKG

ojp-sdk-legacy

Version:

OJP (Open Journey Planner) Javascript SDK (legacy version)

61 lines (60 loc) 1.96 kB
export class Duration { constructor(hours, minutes) { this.hours = hours; this.minutes = minutes; this.totalMinutes = hours * 60 + minutes; } static initWithTreeNode(parentTreeNode, nodeName = 'Duration') { const durationS = parentTreeNode.findTextFromChildNamed(nodeName); if (durationS === null) { return null; } const duration = Duration.initFromDurationText(durationS); return duration; } static initFromDurationText(durationS) { if (durationS === null) { return null; } // PT4H19M durationS = durationS.replace('PT', ''); let hours = 0; const hoursMatches = durationS.match(/([0-9]+?)H/); if (hoursMatches) { hours = parseInt(hoursMatches[1]); } let minutes = 0; const minutesMatches = durationS.match(/([0-9]+?)M/); if (minutesMatches) { minutes = parseInt(minutesMatches[1]); } const duration = new Duration(hours, minutes); return duration; } static initFromTotalMinutes(totalMinutes) { const hours = Math.floor(totalMinutes / 60); const minutes = totalMinutes - hours * 60; const duration = new Duration(hours, minutes); return duration; } formatDuration() { const durationParts = []; if (this.hours > 0) { durationParts.push(this.hours + 'h '); } durationParts.push(this.minutes + 'min'); return durationParts.join(''); } plus(otherDuration) { return Duration.initFromTotalMinutes(this.totalMinutes + otherDuration.totalMinutes); } asOJPFormattedText() { const parts = []; parts.push('PT'); if (this.hours > 0) { parts.push('' + this.hours + 'H'); } parts.push('' + this.minutes + 'M'); return parts.join(''); } }