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
13 changes: 9 additions & 4 deletions format-clock-edge-cases/timeConverter.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
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`;
}
Comment on lines +4 to 12

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.

  • On line 4: Is it necessary to compute the "hour" part of the constructed string?

  • Could consider storing the minute in a variable first to avoid repeated code.

  • Note: The .slice() method supports negative indices, which count positions from the end of the string.
    For example, str.slice(-3) returns the substring containing last three characters from str.

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.

Line 5 is much simpler now, and the minutes variable removes the repeat. Good.

return `${time} am`;
}

export {formatAs12HourClock};
export { formatAs12HourClock };
56 changes: 51 additions & 5 deletions format-clock-edge-cases/timeConverter.test.js
Comment thread
cjyuan marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -1,11 +1,57 @@
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("can correctly convert midnight with double-digit minutes", function () {
assert.equal(formatAs12HourClock("00:15"), "12:15 am");
});

test("can correctly convert morning time", function() {
assert.equal(formatAs12HourClock("08:00"), "08:00 am");
test("can correctly convert noon with double-digit minutes", function () {
assert.equal(formatAs12HourClock("12:15"), "12:15 pm");
});

test("can correctly convert morning single-digit hours with double-digit minutes", function () {
assert.equal(formatAs12HourClock("08:15"), "08:15 am");
});

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

test("can correctly convert afternoon with double-digit minutes", function () {
assert.equal(formatAs12HourClock("13:15"), "01:15 pm");
});

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

test("can correctly convert evening with single-digit minutes", function () {
assert.equal(formatAs12HourClock("23:05"), "11:05 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 midnight time", function () {
assert.equal(formatAs12HourClock("00:00"), "12:00 am");
});

test("can correctly convert 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.

Optional: "can correctly convert minutes" doesn't say what makes 21:08 worth testing. It's the last pm hour that becomes a single digit (9), with a single-digit minute. A name like "can correctly convert the last single-digit pm hour" or "can correctly convert 9pm with single-digit minutes" would say that, the way your other test names do.

assert.equal(formatAs12HourClock("21:08"), "09:08 pm");
});

test("can correctly convert noon", function () {
assert.equal(formatAs12HourClock("12:00"), "12:00 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");
});
Loading