Why date comparison almost always fires wrong
When Apps Script reads a date cell via getValues(), it returns a JavaScript Date object. That object carries the full timestamp — including a time component that reflects the spreadsheet's timezone offset. A cell you formatted as '2026-06-10' arrives in your script as something like 'Wed Jun 10 2026 00:00:00 GMT-0500', and new Date() for the current moment might be 'Wed Jun 10 2026 09:14:33 GMT-0500'. Comparing those two with === or getTime() will always return false, so your reminder never fires.
The fix is one line per date: call setHours(0, 0, 0, 0) on both the cell value and today's date before comparing. That zeroes out hours, minutes, seconds, and milliseconds, leaving only the calendar date. I keep a small normalizeDate() helper at the top of every sheet-automation file I write; re-typing setHours four times per comparison is where bugs hide.
Once both sides are normalized, use getTime() to compare — it returns an integer (milliseconds since epoch) and === works correctly. Direct Date object comparison with == does not, because two different Date objects are different references even when they represent the same moment.