แปลงจำนวนวันทั้งหมดเป็นออบเจกต์ที่มี years, months, weeks, days โดยไม่นับปีอธิกสุรทิน (ปีละ 365 วัน เดือนละ 30 วัน)
ตัวอย่าง
738 days → { years: 2, months: 0, weeks: 1, days: 1 }
ตัวอย่างโค้ด
const days = 738;
const calculateTiming = d => {
let years = 0, months = 0, weeks = 0, days = 0;
while (d > 0) {
if (d >= 365) { years++; d -= 365; }
else if (d >= 30) { months++; d -= 30; }
else if (d >= 7) { weeks++; d -= 7; }
else { days++; d--; }
}
return { years, months, weeks, days };
};
console.log(calculateTiming(days));
ผลลัพธ์
{ years: 2, months: 0, weeks: 1, days: 1 }
วิธีแบบคณิตศาสตร์ (เร็วกว่า ไม่ต้องลูป)
const calculateTiming = d => {
const years = Math.floor(d / 365);
d %= 365;
const months = Math.floor(d / 30);
d %= 30;
const weeks = Math.floor(d / 7);
const days = d % 7;
return { years, months, weeks, days };
};
ใช้ Math.floor และ % (modulo) คำนวณได้ทันที O(1)