diff --git a/format-clock-edge-cases/timeConverter.js b/format-clock-edge-cases/timeConverter.js index 310c07bd9..69d225960 100644 --- a/format-clock-edge-cases/timeConverter.js +++ b/format-clock-edge-cases/timeConverter.js @@ -1,11 +1,70 @@ function formatAs12HourClock(time) { + if (typeof time !== "string") { + return "Incorrect timing format"; + } + const correctTimingFormat = time.match(/^(\d{1,2}):(\d{2})$/); + + if (!correctTimingFormat) { + return "Incorrect timing format"; + } + + if (time.length == 4) { + time = time.padStart(5, "0"); + } + + const match = time.match(/^(\d{1,2}):(\d{2})$/); + + if (!match) { + return "Incorrect timing format"; + } const hours = Number(time.slice(0, 2)); + const minutes = Number(time.slice(3, 5)); + + // 00:00 + if (time === "00:00") { + return `12:00 am`; + } + + // 12:00 + if (time === "12:00") { + return `12:00 pm`; + } + + // 00:xx + if (hours === 0) { + return `12:${minutes.toString().padStart(2, "0")} am`; + } + + // 01:xx - 11:xx + if (hours < 12) { + return `${time} am`; + } + + // 12:xx + if (hours === 12) { + return `${time} pm`; + } + + // 13:00 - 21:59 + if (hours > 12 && hours < 22 && minutes < 10) { + return `${(hours - 12).toString().padStart(2, "0")}:${minutes + .toString() + .padStart(2, "0")} pm`; + } + + if (hours > 12 && hours < 22 && minutes >= 10) { + return `${(hours - 12).toString().padStart(2, "0")}:${minutes} pm`; + } + + // 22:00 - 23:59 + if (hours >= 22 && minutes < 10) { + return `${hours - 12}:${minutes.toString().padStart(2, "0")} pm`; + } - if (hours > 12) { - return `${hours - 12}:00 pm`; + if (hours >= 22 && minutes >= 10) { + return `${hours - 12}:${minutes} pm`; } - 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 88f2af094..08f4be8cd 100644 --- a/format-clock-edge-cases/timeConverter.test.js +++ b/format-clock-edge-cases/timeConverter.test.js @@ -1,11 +1,38 @@ -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 corectly convert midnight", () => + assert.equal(formatAs12HourClock("00:00"), "12:00 am")); +test("can corectly convert mid-day", () => + assert.equal(formatAs12HourClock("12:00"), "12:00 pm")); +test("can corectly convert half an hour passed midnight", () => + assert.equal(formatAs12HourClock("00:30"), "12:30 am")); +test("can correctly convert time with missing leading zero", function () { + assert.equal(formatAs12HourClock("9:00"), "09:00 am"); +}); +test("can correctly handel non digit format entries", function () { + assert.equal(formatAs12HourClock("nineOclock"), "Incorrect timing format"); +}); +test("can correctly handel one minute after midnight", function () { + assert.equal(formatAs12HourClock("00:01"), "12:01 am"); +}); +test("can correctly handel one minute before midday", function () { + assert.equal(formatAs12HourClock("11:59"), "11:59 am"); }); -test("can correctly convert morning time", function() { - assert.equal(formatAs12HourClock("08:00"), "08:00 am"); +test("can correctly handel 1 pm", function () { + assert.equal(formatAs12HourClock("13:00"), "01:00 pm"); +}); +test("can correctly handel one minute before midnight", function () { + assert.equal(formatAs12HourClock("23:59"), "11:59 pm"); +}); +test("can correctly handle one minute after midday", function () { + assert.equal(formatAs12HourClock("12:01"), "12:01 pm"); });