JavaScript Date Survivor
For everyone who has fought JavaScript's Date object and lived: zero-indexed months, surprise UTC, and an Invalid Date that is somehow still a Date.
Award it to someone today. Your own email app sends it.
Physical coins and stickers are coming soon. Until then, you can email this coin for free.
Meaning
For every developer who has fought JavaScript's Date object and lived: months that start at zero, new Date() silently switching between local time and UTC, Invalid Date that is somehow still a Date, and a timestamp that turns into NaN the moment a user crosses a time zone. The serpent has many heads, and every one of them is October 31st in a different time zone.
Design
Front (Obverse)
- Outer rim: JAVASCRIPT DATE SURVIVOR ยท TRIUMPH OVER TZ CHAOS & ISO 8601
- Inner ring: ORDER OF THE CHRONOS FIGHTER
- Center: A frazzled developer in glasses and a hoodie marked "JS CODER" swings a sword engraved "MOMENT.JS" at a many-headed date serpent. A shield reading "JS DATE" is on his arm. The serpent's heads carry calendar pages (Oct 31, Nov 1, Feb 29), time-zone tags (GMT, PST, UTC) and a melting clock. A stone plaque at its feet reads "THE JAVASCRIPT DATE BEAST: Date.now() NaN, Month is 0-indexed". A banner below says "VANQUISHERS OF THE DATE APOCALYPSE". The field is engraved with faint
Invalid DateandDate.now()text and small clocks.
Back (Reverse)
- Top rim: OFFICIALLY RECOGNIZED
- Bottom rim: WE SURVIVED THE CLOCK'S CHAOS
- Center: The same developer, older and calmer, holds a clock face labeled
Date.now()in front of a blue enameled shield. A steaming coffee mug is on one side and a cracked keyboard on the other. A banner across the middle reads "JAVASCRIPT DATE VETERAN", above "FOR SURVIVING TIMEZONE HELL & ZERO-INDEXED MONTHS", then the symbols{ }, a NaN file and a UTC globe, and "EST. 1995", the year JavaScript was born.
Finish & Style
Antique bronze challenge coin, ~1.75" diameter, high-relief center scene, raised rim lettering, beaded outer edge, with a blue enamel accent on the reverse shield. Matches the existing ITChallengeCoins series.
How to Earn It
- Fix a bug caused by JavaScript dates: a zero-indexed month, local time vs. UTC,
Invalid Date, or a date that shifted by a day for users in another time zone. - Or migrate a codebase off hand-rolled date math (or off Moment.js) to a modern date library or the
TemporalAPI. - Or ship a date picker that works in every time zone, including on the day daylight saving time changes.
Citation
For staring into
new Date(2026, 1, 29)and refusing to blink, and for teaching a hundred thousand lines of JavaScript that a month is not an index.