需要
给你一个xxxxxx秒的数值,你想方法把它转换成xx年xx小时xx分xx秒这种格局对人类敌对、可读的文字。
思路
先定义好转换规则,比方1年是多少秒,1天是多少秒,1小时是多少秒等等。
而后把每一个规定放到数组中,大的工夫单位放在前边,越小的工夫单位越往后放,这样做的目标是:应用的时候,先从大的工夫单位开始转换(做除法运算),转换完剩下的不够1个工夫单位的秒数(即余数),给下个稍小的工夫单位,让它再做转换操作,而后再把转换完剩下的不够1个工夫单位的秒数,给下一个更小的工夫单位去操作,如此重复,直到最小的工夫单位,那就是秒了。
这种迭代操作用数组的reduce()
办法很适合,它就是从头到尾对每个数组元素先做一些操作,而后把某些数据给下一次操作应用。
代码
代码如下:
// 将秒数转换成对人类敌对的格局数组function friendlyTime(seconds) { // 转化规定 const RULES = [{ title: '年', multiple: 365 * 24 * 60 * 60 }, {title: '天', multiple: 24 * 60 * 60 }, { title: '小时', multiple: 60 * 60, }, { title: '分', multiple: 60, }, { title: '秒', multiple: 1 }] let friendlyArr = [] RULES.reduce((pre, current) => { // 商取整数 const quotient = Math.floor(pre / current.multiple) // 商大于0,才算是有意义的工夫,将其和其对应的工夫单位一并放入数组中 if (quotient > 0) { friendlyArr.push(`${quotient}${current.title}`) } // 返回余数,给下次计算用 return pre % current.multiple }, seconds) return friendlyArr}