Let's suppose I have a number which represents the minutes passed from the start time to now.
I wan to create a function which returns the years, months, week and days corresponding to the minutes I am passing to that function.
Here an example:
var minutes = 635052; // 635052 = (24*60)*365 + (24*60)*30*2 + (24*60)*14 + (24*60)*2 + 12;
getDataHR(minutes); // 1 year, 2 months, 2 week, 2 days, 12 minutes
function getDataHR (newMinutes) {
minutes = newMinutes;
.......
return hrData; // 1 year, 2 months, 2 week, 2 days, 12 minutes
}
What is the best way to achieve the result?
Maybe like this?
var units = {
"year": 24*60*365,
"month": 24*60*30,
"week": 24*60*7,
"day": 24*60,
"minute": 1
}
var result = []
for(var name in units) {
var p = Math.floor(value/units[name]);
if(p == 1) result.push(p + " " + name);
if(p >= 2) result.push(p + " " + name + "s");
value %= units[name]
}
Building off of thg435's response above, I created a function that converts seconds to days, hours, minutes, and seconds:
function secondsToString(seconds)
{
var value = seconds;
var units = {
"day": 24*60*60,
"hour": 60*60,
"minute": 60,
"second": 1
}
var result = []
for(var name in units) {
var p = Math.floor(value/units[name]);
if(p == 1) result.push(" " + p + " " + name);
if(p >= 2) result.push(" " + p + " " + name + "s");
value %= units[name]
}
return result;
}
I also added some spaces to the result to give the commas some room. Output looks like:
1 day, 3 hours, 52 minutes, 7 seconds.
I did it like this, because I didn't even know there was a modulo operator in javascript:
var minutes = 635052; // 635052 = (24*60)*365 + (24*60)*30*2 + (24*60)*14 + (24*60)*2 + 12;
getDataHR(minutes); // 1 year, 2 months, 2 week, 2 days, 12 minutes
function getDataHR (newMinutes) {
MINS_PER_YEAR = 24 * 365 * 60
MINS_PER_MONTH = 24 * 30 * 60
MINS_PER_WEEK = 24 * 7 * 60
MINS_PER_DAY = 24 * 60
minutes = newMinutes;
years = Math.floor(minutes / MINS_PER_YEAR)
minutes = minutes - years * MINS_PER_YEAR
months = Math.floor(minutes / MINS_PER_MONTH)
minutes = minutes - months * MINS_PER_MONTH
weeks = Math.floor(minutes / MINS_PER_WEEK)
minutes = minutes - weeks * MINS_PER_WEEK
days = Math.floor(minutes / MINS_PER_DAY)
minutes = minutes - days * MINS_PER_DAY
return years + " year(s) " + months + " month(s) " + weeks + " week(s) " + days + " day(s) " + minutes + " minute(s)"
//return hrData; // 1 year, 2 months, 2 week, 2 days, 12 minutes
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With