我在网上看到一个问题,该问题需要一个程序将数字秒转换为秒,分钟,小时,天,年,并且我能够在下面提供此功能

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


我已经研究了代码,并具有基本的递归知识,我认为这将返回一个包含结果的数组,例如,如果输入

formatD(63)


我希望看到:

["1 minute", "3 seconds"]


但是我一直没有得到任何回报。..任何修复或有什么地方做错了吗?

最佳答案

只需检查您的arrTime数组。

并从您编写的方法中返回arrTime

那应该包含时间。



var arrTime = new Array();
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))
        }
    }

   return arrTime;
}
console.log(formatD(65));
console.log(arrTime);

09-11 17:37