Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions format-clock-edge-cases/timeConverter.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
function formatAs12HourClock(time) {

const hours = Number(time.slice(0, 2));
const minutes = time.slice(-3);

if (hours === 0) {
return `12${minutes} am`;
}
if (hours === 12) {
return `${time} pm`;
}
if (hours > 12) {
return `${hours - 12}:00 pm`;
return `${String(hours - 12).padStart(2, "0")}${minutes} pm`;
}
return `${time} am`;
}

export {formatAs12HourClock};
export { formatAs12HourClock };
42 changes: 37 additions & 5 deletions format-clock-edge-cases/timeConverter.test.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,43 @@
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("can correctly convert midnight with double digit minutes", function () {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This tests a time inside the midnight hour, which is good. What about midnight itself, "00:00"? The same goes for noon, "12:00", and the very last minute of the day, "23:59". Bugs often hide at the exact point where something changes, so each of those is worth its own test.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All three are in now. Good.

assert.equal(formatAs12HourClock("00:25"), "12:25 am");
});

test("can correctly convert noon with the double digits minutes ", function () {
assert.equal(formatAs12HourClock("12:20"), "12:20 pm");
});

test("can correctly convert evening with single-digit minutes", function () {
assert.equal(formatAs12HourClock("23:05"), "11:05 pm");
});

test("can correctly convert one minute before noon", function () {
assert.equal(formatAs12HourClock("11:59"), "11:59 am");
});

test("can correctly convert one hour after noon", function () {
assert.equal(formatAs12HourClock("13:00"), "01:00 pm");
});

test("can correctly convert midnight", function () {
assert.equal(formatAs12HourClock("00:00"), "12:00 am");
});

test("can correctly convert Noon", function () {
assert.equal(formatAs12HourClock("12:00"), "12:00 pm");
});

test("can correctly convert last minutes of the day", function () {
assert.equal(formatAs12HourClock("23:59"), "11:59 pm");
});
Loading