Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một số num đại diện cho số giây làm đối số duy nhất. Hàm phải xây dựng và trả về một chuỗi chứa thông tin về năm, ngày, giờ và phút chứa trong số giây đó, nếu có.
Để mục đích câu hỏi này, ta coi tất cả các năm đều có 365 ngày.
Ví dụ, nếu đầu vào là:
const num = 5454776657;
Thì đầu ra sẽ là:
const output = '172 years, 353 days, 23 hours, 44 minutes and 17 seconds';
Ví dụ
Dưới đây là mã thực hiện:
const findTime = (num) => {
if (num < 1) { return '0'; }
const qualifier = num => (num > 1 ? 's' : '');
const numToStr = (num, unit) => num > 0 ? ` ${num} ${unit}${qualifier(num)}` : '';
const oneMinute = 60;
const oneHour = oneMinute * 60;
const oneDay = oneHour * 24;
const oneYear = oneDay * 365;
const times = {
year: ~~(num / oneYear),
day: ~~((num % oneYear) / oneDay),
hour: ~~((num % oneDay) / oneHour),
minute: ~~((num % oneHour) / oneMinute),
second: num % oneMinute,
};
let str = '';
for (let [key, value] of Object.entries(times)) {
str += numToStr(times[key], key);
}
const arr = str.trim().split(' ');
const res = [];
arr.forEach((x, i) => {
if (i % 2 === 0 && i !== 0) res.push(i === arr.length - 2 ? 'and' : ',');
res.push(x);
});
return res.join(' ').replace(/\s,/g, ',');
};
console.log(findTime(5454776657));
Kết quả
Đầu ra trên console:
172 years, 353 days, 23 hours, 44 minutes and 17 seconds