日付の文字列は解釈が違う
new Date('2026-10-10')は日付のみの形式で、UTCとして解釈されます。時刻まで書いた'2026-10-10T00:00'は端末のローカル時間になります。この違いが、日付のずれの原因になります。
月は0始まり
getMonth()は0〜11を返します。月末の日は、new Date(年,月+1,0).getDate()で求められます。
日数の差は、UTCで計算する
夏時間のある地域では、1日が24時間でない日があります。日数の差は、Date.UTCで揃えてから計算すると安全です。表示にはIntl.DateTimeFormatとtimeZone:'Asia/Tokyo'などを使います。