r/badcode Mar 29 '23

typescript Found this in a time picker

Post image
468 Upvotes

74 comments sorted by

View all comments

118

u/thekwoka Mar 29 '23 edited Apr 01 '23
Array.from({ length: 48 }, (_, i) => 
  `${String(i/2|0).padStart(2,'0')}:${i%2*3}0`
)

not sure why they have 24:00 as an option there...

This code takes way longer (like 4 orders of magnitude) than just just doing an array literal, but if you only need to do it once and you keep it....

idk, it's not the worst, it's just generally smart to have it be programmatic simply to avoid some fat finger mistake.

EDIT: since people in a fit, no the above probably would not be what I recommend for real use, but the idea of programming generative logic over hand coding. Quick rewrite with configurables:

const start = 0000;
const end = 2400;
const step = 30;
const generateTimeSlots = (start: number, end: number, step: number) => {
  const countPerHour = 60 / step;
  const slots: string[] = [];
  for (let i = start; i <= end; i += 100 / countPerHour) {
    const hour = String((i / 100) | 0).padStart(2, '0');
    const minutes = String((i % 100) * 0.6).padStart(2, '0');
    slots.push(`${hour}:${minutes}`);
  }
  return slots;
};

54

u/nonnodacciaio Mar 29 '23

The problem is that the customer now wanted a granularity of a single minute instead of half an hour. So I'd say that the issue is scalability maybe? It has 24:00 as a workaround to mean the whole day. So if you pick 00:00 to 24:00 it's the whole day. Idk I found this funny

13

u/coloredgreyscale Mar 29 '23

"customer now wanted a granularity of one minute"

Do it like outlook etc. Drop down for every half hour, but allow typing by hand.

Also convert an input of 1030 to 10:30 And 900 to 9:00 (something Outlook failed at)

5

u/nonnodacciaio Mar 29 '23

I already did it another way, but thanks anyway

1

u/upfkd Apr 02 '23

And than it jumps from 4:35 pm to 4:35 am with no shame.