Ваш чек am / pm обратный:
var ampm = hours >= 12 ? ` ${midnight.am}` : ` ${midnight.pm}`;
Если час> = 12, это должен быть PM, а не AM, поэтому это должно быть:
var ampm = hours >= 12 ? ` ${midnight.pm}` : ` ${midnight.am}`;
Сейчас если вы запустите его, он покажет 8:30 AM
, а если вы установите час 20
, он покажет 8:30 PM
Это исправит вашу текущую проблему, но было бы лучше использовать существующую библиотеку для форматирование даты, поскольку это может осложниться, особенно с i18n. Есть пара популярных, таких как date-fns и moment. js, которые сделают тяжелую работу за вас.