randRange(1, 12) randRange(0, 59) floor(MINUTE / 5) MINUTE % 5 MINUTE > 5 ? MINUTE : "0" + "" + MINUTE icu.getDateFormatSymbols().am_pm[HOUR >= 7 ? 0 : 1]

What time is it?

init({ range: [[-4, 4], [-4, 4]], scale: 25 }); clock = addAnalogClock({ hour: HOUR, minute: MINUTE, minuteTicks: 0, showLabels: false }); clock.draw();
init({ range: [[-5, 5], [-3, 3]], scale: 25 });

The time is:
HOUR : NICE_MINUTE AM_PM

clock.drawLabels();
path([ [-3, -1], [3, -1], [3, 1], [-3, 1], [-3, -1] ]); graph.time = label( [0, -0.1], "\\Huge{\\phantom{00}:\\phantom{00}}", "center" );

The small hand is for the hour, and the big hand is for the minutes.

The hour hand is pointing at `HOUR`, so the hour is `HOUR`.

The hour hand is between `HOUR` and `HOUR + 1 === 13 ? 1 : HOUR + 1`, so the hour is `HOUR`.

The hour hand is close to but hasn't passed `HOUR + 1 === 13 ? 1 : HOUR + 1`, so the hour is still `HOUR`.

graph.time.remove(); var padding = HOUR < 10 ? "\\phantom{0}" : ""; graph.time = label([0, -0.1], "\\Huge{" + padding + HOUR + ":\\phantom{00}}", "center" );

Each large tick mark represents `\dfrac{60}{12} = 5` minutes. Each small tick mark represents `1` minute.

The minute hand is pointing at the `12`, so `0` minutes have past since the hour.

The minute hand is pointing at `BIG_TICK`, which represents `BIG_TICK \times 5 = MINUTE` minutes.

The minute hand is `SMALL_TICK` small tick past the `BIG_TICK === 0 ? 12 : BIG_TICK`, which represents `BIG_TICK \times 5 + SMALL_TICK = MINUTE` minutes. The minute hand is `SMALL_TICK` small ticks past the `BIG_TICK === 0 ? 12 : BIG_TICK`, which represents `BIG_TICK \times 5 + SMALL_TICK = MINUTE` minutes.

graph.time.remove(); var padding = MINUTE < 10 ? "0" : ""; graph.time = label([0, -0.1], "\\Huge{" + HOUR + ":" + padding + MINUTE + "}", "center" );

The time is `HOUR`:`NICE_MINUTE`.