From f016ea892a8381be8d6f62bff9ef126396b0c9fb Mon Sep 17 00:00:00 2001 From: SalahAlsabhi Date: Sun, 4 Oct 2026 10:49:18 +0100 Subject: [PATCH 1/2] Fix formatAs12HourClock edge cases and add tests --- format-clock-edge-cases/timeConverter.js | 16 ++++++--- format-clock-edge-cases/timeConverter.test.js | 33 +++++++++++++++---- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index 310c07bd9..8dfb1eb9c 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -1,11 +1,17 @@ -function formatAs12HourClock(time) { +// function receives a string representing time in 24-hour format as an argument +function formatAs12HourClock(time) { const hours = Number(time.slice(0, 2)); + const minutes = time.slice(3, 5); - if (hours > 12) { - return `${hours - 12}:00 pm`; + const period = hours >= 12 ? "pm" : "am"; + + let displayHour = hours % 12; + if (displayHour === 0) { + displayHour = 12; } - return `${time} am`; + + return `${displayHour}:${minutes} ${period}`; } -export {formatAs12HourClock}; +export { formatAs12HourClock }; diff --git a/format-clock-edge-cases/timeConverter.test.js b/format-clock-edge-cases/timeConverter.test.js index 88f2af094..a55b4c269 100644 --- a/format-clock-edge-cases/timeConverter.test.js +++ b/format-clock-edge-cases/timeConverter.test.js @@ -1,11 +1,30 @@ -import {formatAs12HourClock} from "./timeConverter.js"; +import { formatAs12HourClock } from "./timeConverter.js"; import assert from "node:assert"; import test from "node:test"; -test("correctly convert time after 12:00", function(){ - assert.equal(formatAs12HourClock("23:00"), "11:00 pm"); -}); +test("correctly convert time after 12:00", () => + assert.equal(formatAs12HourClock("23:00"), "11:00 pm")); -test("can correctly convert morning time", function() { - assert.equal(formatAs12HourClock("08:00"), "08:00 am"); -}); +test("can correctly convert morning time", () => + assert.equal(formatAs12HourClock("08:00"), "8:00 am")); + +test("can correctly convert midnight", () => + assert.equal(formatAs12HourClock("00:00"), "12:00 am")); + +test("noon is pm", () => + assert.equal(formatAs12HourClock("12:00"), "12:00 pm")); + +test("noon with minutes", () => + assert.equal(formatAs12HourClock("12:45"), "12:45 pm")); + +test("afternoon keeps minutes", () => + assert.equal(formatAs12HourClock("13:30"), "1:30 pm")); + +test("evening keeps minutes", () => + assert.equal(formatAs12HourClock("23:15"), "11:15 pm")); + +test("midnight with minutes", () => + assert.equal(formatAs12HourClock("00:30"), "12:30 am")); + +test("just before noon", () => + assert.equal(formatAs12HourClock("11:59"), "11:59 am")); From 1b5fe5e721005c6c3fd2d4832a7ca89684bad952 Mon Sep 17 00:00:00 2001 From: SalahAlsabhi Date: Tue, 6 Oct 2026 10:15:06 +0100 Subject: [PATCH 2/2] Simplify displayHour and use slice(-2) for minutes --- format-clock-edge-cases/timeConverter.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index 8dfb1eb9c..50881c65f 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -2,14 +2,11 @@ function formatAs12HourClock(time) { const hours = Number(time.slice(0, 2)); - const minutes = time.slice(3, 5); + const minutes = time.slice(-2); const period = hours >= 12 ? "pm" : "am"; - let displayHour = hours % 12; - if (displayHour === 0) { - displayHour = 12; - } + const displayHour = hours % 12 || 12; return `${displayHour}:${minutes} ${period}`; }