From 1bca3cef5871e66808c7fdf2bcc5b8d0b3f846a6 Mon Sep 17 00:00:00 2001 From: Monsur Abdulrahman Date: Sat, 17 Oct 2026 08:54:59 +0100 Subject: [PATCH 1/3] fix: update formatAs12HourClock function to handle edge cases and add corresponding tests --- format-clock-edge-cases/README.md | 1 + format-clock-edge-cases/timeConverter.js | 6 ++++ format-clock-edge-cases/timeConverter.test.js | 30 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/format-clock-edge-cases/README.md b/format-clock-edge-cases/README.md index 8a43a9e96..1acca0972 100644 --- a/format-clock-edge-cases/README.md +++ b/format-clock-edge-cases/README.md @@ -13,3 +13,4 @@ function formatAs12HourClock(time) { ``` It still has bugs. Think of as many edge-cases as you can with this code. Write tests for all of them, and fix this code so that it works correctly for all valid inputs. You don't need to worry about invalid inputs (e.g. `"25:00"`). + diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index 310c07bd9..c6945b14f 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -5,6 +5,12 @@ function formatAs12HourClock(time) { if (hours > 12) { return `${hours - 12}:00 pm`; } + if (hours === 12) { + return `${time} pm`; + } + if (hours === 0) { + return `12:00 am`; + } return `${time} am`; } diff --git a/format-clock-edge-cases/timeConverter.test.js b/format-clock-edge-cases/timeConverter.test.js index 88f2af094..3970bdf93 100644 --- a/format-clock-edge-cases/timeConverter.test.js +++ b/format-clock-edge-cases/timeConverter.test.js @@ -9,3 +9,33 @@ test("correctly convert time after 12:00", function(){ test("can correctly convert morning time", function() { assert.equal(formatAs12HourClock("08:00"), "08:00 am"); }); + +//It still has bugs. Think of as many edge-cases as you +//can with this code. Write tests for all of them, and +//fix this code so that it works correctly for all valid +//inputs. You don't need to worry about invalid inputs +//(e.g. `"25:00"`). +//Here are some additional edge cases to consider for the `formatAs12HourClock` function, along with the corresponding tests:```javascript +test("correctly convert midnight", function() { + assert.equal(formatAs12HourClock("00:00"), "12:00 am"); +}); + +test("correctly convert noon", function() { + assert.equal(formatAs12HourClock("12:00"), "12:00 pm"); +}); + +test("correctly convert single digit hour in the morning", function() { + assert.equal(formatAs12HourClock("01:30"), "01:30 am"); +}); + +test("correctly convert single digit hour in the afternoon", function() { + assert.equal(formatAs12HourClock("13:45"), "01:45 pm"); +}); + +test("correctly convert time with leading zeros", function() { + assert.equal(formatAs12HourClock("09:05"), "09:05 am"); +}); + +test("correctly convert time with no leading zeros", function() { + assert.equal(formatAs12HourClock("9:5"), "09:05 am"); +}); \ No newline at end of file From 59ecb2bcd6d7850c1f1ef9779f3f6ecd76f4f71c Mon Sep 17 00:00:00 2001 From: Monsur Abdulrahman Date: Sat, 17 Oct 2026 09:54:49 +0100 Subject: [PATCH 2/3] Add leading zero for a single digit --- format-clock-edge-cases/timeConverter.js | 10 +++++++--- format-clock-edge-cases/timeConverter.test.js | 7 +------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index c6945b14f..3a3fc62a3 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -1,15 +1,19 @@ 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 convertedHours = hours - 12; + // Add leading zero if convertedHours is a single digit + const formattedHours = convertedHours < 10 ? `0${convertedHours}` : convertedHours; + return `${formattedHours}:${minutes} pm`; } if (hours === 12) { - return `${time} pm`; + return `12:${minutes} pm`; } if (hours === 0) { - return `12:00 am`; + return `12:${minutes} am`; } return `${time} am`; } diff --git a/format-clock-edge-cases/timeConverter.test.js b/format-clock-edge-cases/timeConverter.test.js index 3970bdf93..f9138c034 100644 --- a/format-clock-edge-cases/timeConverter.test.js +++ b/format-clock-edge-cases/timeConverter.test.js @@ -10,12 +10,7 @@ test("can correctly convert morning time", function() { assert.equal(formatAs12HourClock("08:00"), "08:00 am"); }); -//It still has bugs. Think of as many edge-cases as you -//can with this code. Write tests for all of them, and -//fix this code so that it works correctly for all valid -//inputs. You don't need to worry about invalid inputs -//(e.g. `"25:00"`). -//Here are some additional edge cases to consider for the `formatAs12HourClock` function, along with the corresponding tests:```javascript + test("correctly convert midnight", function() { assert.equal(formatAs12HourClock("00:00"), "12:00 am"); }); From 8d645cdb98b9e179f6b1d7c7e3b0c8539b44b97c Mon Sep 17 00:00:00 2001 From: Monsur Abdulrahman Date: Sat, 17 Oct 2026 10:25:27 +0100 Subject: [PATCH 3/3] refactor: improve formatting logic and clean up test cases for time conversion --- format-clock-edge-cases/timeConverter.js | 4 ++++ format-clock-edge-cases/timeConverter.test.js | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index 3a3fc62a3..f806a5a76 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -9,12 +9,16 @@ function formatAs12HourClock(time) { const formattedHours = convertedHours < 10 ? `0${convertedHours}` : convertedHours; return `${formattedHours}:${minutes} pm`; } + //handling noon. if (hours === 12) { return `12:${minutes} pm`; } + + //handling midnight if (hours === 0) { return `12:${minutes} am`; } + //handling morning times return `${time} am`; } diff --git a/format-clock-edge-cases/timeConverter.test.js b/format-clock-edge-cases/timeConverter.test.js index f9138c034..cd9066628 100644 --- a/format-clock-edge-cases/timeConverter.test.js +++ b/format-clock-edge-cases/timeConverter.test.js @@ -31,6 +31,3 @@ test("correctly convert time with leading zeros", function() { assert.equal(formatAs12HourClock("09:05"), "09:05 am"); }); -test("correctly convert time with no leading zeros", function() { - assert.equal(formatAs12HourClock("9:5"), "09:05 am"); -}); \ No newline at end of file