Created
March 6, 2019 17:23
-
-
Save krcrawford/b7574cc0b3450db8bd81e8e19b936f25 to your computer and use it in GitHub Desktop.
Javascript Homework #5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const timeAdder = (value1, label1, value2, label2) => { | |
if (typeof value1 !== "number" || typeof value2 !== "number") { | |
console.log("Values must be numbers"); | |
return false; // must be numbers | |
} | |
if (/\./.test(value1) || /\./.test(value2)) { | |
console.log("Values must be integers"); | |
return false; // must be integers | |
} | |
if (value1 < 0 || value2 < 0) { | |
console.log("Values must be positive"); | |
return false; // must be positive | |
} | |
const units = ["second", "seconds", "minute", "minutes", "hour", "hours", "day", "days"]; | |
if (typeof label1 !== "string" || typeof label2 !== "string") { | |
console.log("Only string types are allowed for labels") | |
return false; // only strings allowed | |
} | |
if (units.indexOf(label1) === -1 || units.indexOf(label2) === -1) { | |
console.log("Only the specific set of strings is allowed for labels") | |
return false; // only specific labels allowed | |
} | |
if ((value1 === 1 && /s$/.test(label1)) || | |
(value2 === 1 && /s$/.test(label2))) { | |
console.log("Check your labels for proper pluralization when necessary, i.e. use 1 hour instead of 1 hours, or 25 minutes insetad of 25 minute"); | |
return false; // make sure pluralization is in place where required | |
} | |
const i1 = units.indexOf(label1); | |
const i2 = units.indexOf(label2); | |
let args = [value1, label1, value2, label2]; | |
if (i1 > i2) { | |
// smaller units first | |
args = [value2, label2, value1, label1]; | |
} | |
switch (args[1]) { | |
case "minute": | |
case "minutes": | |
args[0] *= 60; | |
break; | |
case "hour": | |
case "hours": | |
args[0] *= 3600; | |
break; | |
case "day": | |
case "days": | |
args[0] *= 86400; | |
break; | |
} | |
switch (args[3]) { | |
case "minute": | |
case "minutes": | |
args[2] *= 60; | |
break; | |
case "hour": | |
case "hours": | |
args[2] *= 3600; | |
break; | |
case "day": | |
case "days": | |
args[2] *= 86400; | |
break; | |
} | |
args[1] = args[3] = "seconds"; | |
let totalSeconds = args[0] + args[2]; | |
let numSeconds = totalSeconds; | |
let numDays = 0, numHours = 0, numMinutes = 0; | |
if (numSeconds >= 86400) { | |
numDays = Math.floor(numSeconds / 86400); | |
} | |
numSeconds -= (numDays * 86400); | |
if (numSeconds >= 3600) { | |
numHours = Math.floor(numSeconds / 3600); | |
} | |
numSeconds -= (numHours * 3600); | |
if (numSeconds >= 60) { | |
numMinutes = Math.floor(numSeconds / 60); | |
} | |
numSeconds -= (numMinutes * 60); | |
let unit = "seconds"; | |
if (numSeconds === 0) { | |
unit = "minutes"; | |
} | |
if (numSeconds === 0 && numMinutes === 0) { | |
unit = "hours"; | |
} | |
if (numSeconds === 0 && numMinutes === 0 && numHours === 0) { | |
unit = "days"; | |
} | |
let res = [totalSeconds, unit]; | |
switch (unit) { | |
case "days": | |
res[0] = numDays; | |
break; | |
case "hours": | |
res[0] = numHours + (numDays * 24); | |
break; | |
case "minutes": | |
res[0] = numMinutes + (numHours * 60) + (numDays * 24); | |
break; | |
} | |
if (res[0] === 1) { | |
res[1] = res[1].substring(0, res[1].length - 1); | |
} | |
console.log("Days: " + numDays + ", Hours: " + numHours + ", Minutes: " + numMinutes + ", Seconds: " + numSeconds); | |
console.log(res); | |
return res; | |
}; | |
timeAdder(2, "hours", 22, "hours"); // <-- [1, "day"] | |
timeAdder(6, "hours", 20, "hours"); // <-- [26, "hours"] | |
timeAdder(60, "minutes", 1, "hour"); // <-- [2, "hours"] | |
timeAdder(10, "minutes", 50, "minutes"); // <-- [1, "hour"] | |
timeAdder(50, "seconds", 10, "minutes"); // <-- [650, "seconds"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment