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.