DEV Community

Discussion on: Daily Challenge #290 - Read the Time

Collapse
 
soorajsnblaze333 profile image
Sooraj (PS)
const digits = ['midnight','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen','twenty '];
const keys = ["o'clock", "quarter", "half"]

const timeToWord = (time) => {
  let num = time.split(':').map((t, i) => (i === 0 && t !== '12') ? +t % 12 : +t);
  let word = '';
  if (!num[0] && !num[1]) word = digits[0];
  else if(num[0] && !num[1]) word = digits[num[0]] + " " + keys[0];
  else {
    if (num[1] <= 30) {
      if (num[1] % 15 === 0) word = keys[num[1] / 15] + " past " +  digits[num[0]]; 
      else word = (num[1] > 20 ? (digits[20] + digits[num[1] - 20]) : digits[num[1]]) + (num[1] > 1 ? " minutes " : " minute ") + "past " + digits[num[0]];
    } else {
      num[1] = 60 - num[1];
      num[0] += 1;
      if (num[0] === 12) num[0] = (+time.split(':')[0] > 12 ? 0 : 12)
      if (num[1] % 15 === 0) word = keys[num[1] / 15] + " to " +  digits[num[0]]; 
      else word = (num[1] > 20 ? (digits[20] + digits[num[1] - 20]) : digits[num[1]]) + (num[1] > 1 ? " minutes " : " minute ") + "to " + digits[num[0]];
    }
  }
  console.log(time + " = " + word);
  return word;
}

timeToWord('13:00');
timeToWord('13:09');
timeToWord('13:15');
timeToWord('13:29');
timeToWord('13:30');
timeToWord('13:31');
timeToWord('13:45');
timeToWord('00:48');
timeToWord('00:08');
timeToWord('12:00');
timeToWord('00:00');

timeToWord('07:01');
timeToWord('01:59');
timeToWord('12:01');
timeToWord('00:01');
timeToWord('11:31');
timeToWord('23:31');

A little big but does the job

Output
Output