From 1bca3cef5871e66808c7fdf2bcc5b8d0b3f846a6 Mon Sep 17 00:00:00 2001 From: Monsur Abdulrahman Date: Sat, 17 Oct 2026 08:54:59 +0100 Subject: [PATCH 1/4] 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 8a43a9e964..1acca0972b 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 310c07bd9c..c6945b14f5 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 88f2af0948..3970bdf93f 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/4] 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 c6945b14f5..3a3fc62a33 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 3970bdf93f..f9138c0342 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/4] 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 3a3fc62a33..f806a5a760 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 f9138c0342..cd90666288 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 From ac13b9526b0e067027fb178b9a0ee620cffadb7f Mon Sep 17 00:00:00 2001 From: Monsur Abdulrahman Date: Wed, 11 Nov 2026 07:11:25 +0000 Subject: [PATCH 4/4] style: format code for consistency and readability in time conversion functions and tests --- format-clock-edge-cases/timeConverter.js | 8 ++--- format-clock-edge-cases/timeConverter.test.js | 34 ++++++++++--------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index f806a5a760..f4216dbfe7 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -1,15 +1,15 @@ function formatAs12HourClock(time) { - const hours = Number(time.slice(0, 2)); const minutes = time.slice(3, 5); if (hours > 12) { const convertedHours = hours - 12; // Add leading zero if convertedHours is a single digit - const formattedHours = convertedHours < 10 ? `0${convertedHours}` : convertedHours; + const formattedHours = + convertedHours < 10 ? `0${convertedHours}` : `${convertedHours}`; return `${formattedHours}:${minutes} pm`; } - //handling noon. + //handling noon. if (hours === 12) { return `12:${minutes} pm`; } @@ -22,4 +22,4 @@ function formatAs12HourClock(time) { return `${time} am`; } -export {formatAs12HourClock}; +export { formatAs12HourClock }; diff --git a/format-clock-edge-cases/timeConverter.test.js b/format-clock-edge-cases/timeConverter.test.js index cd90666288..cde917ab6c 100644 --- a/format-clock-edge-cases/timeConverter.test.js +++ b/format-clock-edge-cases/timeConverter.test.js @@ -1,33 +1,35 @@ -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", function () { + 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", function () { + assert.equal(formatAs12HourClock("08:00"), "08:00 am"); }); - -test("correctly convert midnight", function() { - assert.equal(formatAs12HourClock("00:00"), "12:00 am"); +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 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 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 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 leading zeros", function () { + assert.equal(formatAs12HourClock("09:05"), "09:05 am"); }); +test("correctly convert double digit hour in the afternoon", function () { + assert.equal(formatAs12HourClock("15:20"), "03:20 pm"); +});