主流網站的「每月」訂閱到底是 30 天還是 31 天?

答案:都不是。主流平台(如 Stripe、Netflix、Google Play)的「每月」通常是按曆月計算:從你訂閱的那一天起,每個月在同一日續扣;若該月沒有那一天,就在當月最後一天扣款。

為什麼不是 30 或 31 天?

因為「每月」本來就不是固定天數:二月只有 28 或 29 天,其他月份 30 或 31 天。為了對齊現實世界的月度週期(薪資、財務帳單、會計與報表),多數服務採用曆月邏輯,而非硬性 30 天。

曆月是怎麼算的?

  • 一般規則:從「起始日」算到「下個月同日」。
    • 例:1/15 開始 → 下一期 2/15、再下一期 3/15。
  • 沒有同日怎麼辦 → 取當月最後一天
    • 例:1/31 開始 → 2/28 → 3/31 → 4/30 → 5/31 ……

備註:扣款日可能因時區差異看起來早/晚一天

DateTime nextBillingDate(DateTime start) {
  int year = start.year;
  int month = start.month + 1;
  if (month > 12) { month = 1; year++; }
  
  try {
    return DateTime(year, month, start.day);
  } catch (e) {
    // 如果該月沒有這一天 → 取當月最後一天
    return DateTime(year, month + 1, 0);
  }
}
發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *