Why Date Math Is Surprisingly Hard
Subtracting two dates in milliseconds gives you an exact duration, but converting that to "months" is ambiguous. Is a month 30 days? 31? February has 28 or 29. A "3-month contract" starting January 31 ends April 30, not May 2. Most date libraries handle this correctly; raw millisecond arithmetic does not.
Leap Year Edge Cases
February 29 only exists in leap years (divisible by 4, except centuries, except those divisible by 400). Code that adds "1 year" to February 29 must decide what to return in a non-leap year. Different libraries make different choices — know what yours does.
Business Day Counting
Many scheduling scenarios require working days only — SLAs, delivery estimates, contract deadlines. Business day counting requires knowing which days are weekends and which dates are public holidays. Public holiday rules vary by locale and change annually, so hardcoding them is fragile. Use a date difference tool that handles this, or a well-maintained locale-aware library in your codebase.
Practical Scheduling Scenarios
- SLA deadlines: "respond within 2 business days" from a Friday 5pm means Tuesday.
- Subscription billing: "1 month from today" must handle month-end dates consistently.
- Age calculations: subtracting birth year from current year is wrong if the birthday has not occurred yet this year.
A date difference calculator handles these edge cases interactively without writing throwaway scripts.