Javascript 秒到人类可读的递归函数

Javascript 秒到人类可读的递归函数,javascript,recursion,time,Javascript,Recursion,Time,我在网上看到一个问题,它需要一个程序将数字秒转换成秒、分、小时、天、年,我能想出下面这个函数 var arrTime = []; function formatD(seconds){ if(seconds > 0){ if(seconds >= 1 && seconds <= 59){ arrTime.push(seconds === 1 ? "1 second" : seconds + " seconds");

我在网上看到一个问题,它需要一个程序将数字秒转换成秒、分、小时、天、年,我能想出下面这个函数

var arrTime = [];
function formatD(seconds){
    if(seconds > 0){
        if(seconds >= 1 && seconds <= 59){
            arrTime.push(seconds === 1 ? "1 second" : seconds + " seconds");
            return arrTime;
        }else
        if(seconds >= 60 && seconds <= 3599){
            arrTime.push(seconds === 60 ? "1 minute" : Math.floor(seconds/60) + " minutes");
            formatD(seconds - (Math.floor(seconds/60) * 60));
        }else
        if(seconds >= 3600 && seconds <= 86399){
            arrTime.push(seconds === 3600 ? "1 hour" : Math.floor(seconds/3600) + " hours");   
            formatD(seconds - (Math.floor(seconds/3600) * 3600))    
        }else
        if(seconds >= 86400 && seconds <= 31535999){
            arrTime.push(seconds === 86400 ? "1 day" : Math.floor(seconds/86400) + " hours");   
            formatD(seconds - (Math.floor(seconds/86400) * 86400))      
        }else{
            arrTime.push(seconds === 31536000 ? "1 year" : Math.floor(seconds/31536000) + " years");   
            formatD(seconds - (Math.floor(seconds/31536000) * 31536000))            
        }
    }
}
我希望看到:

["1 minute", "3 seconds"]

但是我一直没有得到返回值..这里有任何修复或错误吗?

只需检查您的
arrTime
数组

并从您编写的方法返回
arrTime

这应该包括时间

var arrTime=new Array();
函数格式化(秒){
如果(秒>0){

如果(秒>=1&&seconds=60&&seconds=3600&&seconds=86400&&seconds只需检查您的
arrTime
数组

并从您编写的方法返回
arrTime

这应该包括时间

var arrTime=new Array();
函数格式化(秒){
如果(秒>0){
如果(秒>=1&&seconds=60&&seconds=3600&&seconds=86400&&seconds,则可以使用两个数组作为单位和相应的秒值

为了得到复数单词,你可以用一个对象来表示一个单位和其他计数

函数格式(秒){
函数(数字、单词){
返回号码===1&&word.one | | word.other;
}
变量字={
年份:{1:'年',其他:'年'},
日期:{1:'天',其他:'天'},
小时:{一个:'小时',另一个:'小时'},
分钟:{一个:'分钟',另一个:'分钟'},
第二:{一个:'秒',另一个:'秒'}
},
单位=[“年”、“日”、“时”、“分”、“秒”],
值=[365*24*60*60,24*60*60,60*60,60,1],
结果=[];
单位。减少(功能(s、u、i){
var temp=数学层(s/值[i]);
如果(临时){
结果.推送(temp+''+get复数(temp,单词[u]);
}
返回s%值[i];
},秒);
返回结果。join(“”);
}
console.log(formatD(63));
console.log(formatD(3600));
控制台日志(格式化(31536000));
console.log(formattd(31626102));
.as console wrapper{max height:100%!important;top:0;}
您可以将两个数组用于单位和相应的秒值

为了得到复数单词,你可以用一个对象来表示一个单位和其他计数

函数格式(秒){
函数(数字、单词){
返回号码===1&&word.one | | word.other;
}
变量字={
年份:{1:'年',其他:'年'},
日期:{1:'天',其他:'天'},
小时:{一个:'小时',另一个:'小时'},
分钟:{一个:'分钟',另一个:'分钟'},
第二:{一个:'秒',另一个:'秒'}
},
单位=[“年”、“日”、“时”、“分”、“秒”],
值=[365*24*60*60,24*60*60,60*60,60,1],
结果=[];
单位。减少(功能(s、u、i){
var temp=数学层(s/值[i]);
如果(临时){
结果.推送(temp+''+get复数(temp,单词[u]);
}
返回s%值[i];
},秒);
返回结果。join(“”);
}
console.log(formatD(63));
console.log(formatD(3600));
控制台日志(格式化(31536000));
console.log(formattd(31626102));
.as控制台包装{最大高度:100%!重要;顶部:0;}
<代码>var n=10000; var hourre=n%3600; n=n小时; var小时=n; n=小时; var分钟数=n%60; var分钟=n-分钟; 秒=n-分钟; n=n-秒 警报(“小时:“+hours/3600+”分钟:“+minutes/60+”秒:“+seconds”);
var n=10000;
var hourre=n%3600;
n=n小时;
var小时=n;
n=小时;
var分钟数=n%60;
var分钟=n-分钟;
秒=n-分钟;
n=n-秒

警报(“小时:+小时/3600+分钟:+分钟/60+秒:+秒)
因为除了第一个if块之外,您没有返回任何东西。刚刚意识到@patrickevans因为除了第一个if块之外,您没有返回任何东西。刚刚意识到@PatrickEvansWorks,但是每次调用函数时,我仍然必须忍受全局变量附加在新值上:(将
arrTime
放在另一个方法中,并从那里调用您的方法,但每次调用函数时,我仍然必须忍受全局变量附加在新值上:(将
arrTime
放在另一个方法中,并从那里调用您的方法。)
["1 minute", "3 seconds"]