将分钟转换成日、周、月和年

Converts minutes into days, week, months and years

本文关键字:分钟 转换      更新时间:2023-09-26

假设我有一个数字,表示从开始时间到现在经过的分钟数。

我想创建一个函数,该函数返回与我传递给该函数的分钟相对应的年、月、周和日。

下面是一个例子:

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
}

达到这个结果的最好方法是什么?

也许像这样?

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]
}

基于上面thg435的响应,我创建了一个将秒转换为天、小时、分钟和秒的函数:

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;
}

我还在结果中添加了一些空格,给逗号一些空间。输出如下所示:

1 day, 3 hours, 52 minutes, 7 seconds.

我是这样做的,因为我甚至不知道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
}

你需要使用除法和模数:

function getDataHR (newMinutes) {
    var hrData = "";
    var years = minutes / YEAR_IN_MINUTES; // int division = no remainder
    hrData += years + "years";
    minutes = minutes % YEAR_IN_MINUTES;
    // ... continue for months, weeks, days, hours, etc. in that order
    return hrData; // 1 year, 2 months, 2 week, 2 days, 12 minutes
}

嘿,我已经实现了一些代码,将一些工作的人

const MINS_PER_YEAR = 24 * 365 * 60,
  MINS_PER_MONTH = 24 * 30 * 60,
  MINS_PER_WEEK = 24 * 7 * 60,
  MINS_PER_DAY = 24 * 60;
const hours = (minutes) => {
  const hour = Math.floor(minutes / 60);
  const remainingMinutes = minutes - hour * 60;
  return `${hour} hours ${remainingMinutes} minutes`;
};
const days = (minutes) => {
  const days = Math.floor(minutes / (24 * 60));
  const remainingMinutes = minutes - days * 24 * 60;
  const hour = hours(remainingMinutes);
  return `${days} days ${hour}`;
};
const weeks = (minutes) => {
  const weeks = Math.floor(minutes / (24 * 7 * 60));
  const remainingMinutes = minutes - weeks * (24 * 7 * 60);
  if (remainingMinutes <= MINS_PER_DAY) return `${weeks} weeks ${hours(remainingMinutes)}`;
  else return `${weeks} weeks ${days(remainingMinutes)}`;
};
const months = (minutes) => {
  const months = Math.floor(minutes / MINS_PER_MONTH);
  const remainingMinutes = minutes - months * MINS_PER_MONTH;
  if (remainingMinutes <= 60) return `${months} months ${hours(remainingMinutes)}`;
  else if (remainingMinutes <= MINS_PER_DAY) return `${months} months ${days(remainingMinutes)}`;
  else return `${months} months ${weeks(remainingMinutes)}`;
};
export const convertMinutes = (minutes) => {
  if (minutes <= 60) return `${minutes} minutes`;
  else if (minutes <= MINS_PER_DAY) return hours(minutes);
  else if (minutes <= MINS_PER_WEEK) return days(minutes);
  else if (minutes <= MINS_PER_MONTH) return weeks(minutes);
  else return months(minutes);
};