PHP Carbon 跨月加減筆記 (含 JS LIb)

述:
說明、注意日期加月、加年溢出問題

About Carbon
A simple PHP API extension for DateTime.


計算日間區間常用~
假設目前為
2022-01-30 (動態日期)
若想取得下個月份
通常會直接…
Carbon::parse(‘2022-01-30’)->addMonth()
但得到結果卻為 2022-03-02 (因2022 的 2 月僅到 28 日)

因為 2022-01-30 為動態日期 (資料來源為使用者輸入等…),會隨操作或情境改變
也沒辦法預期加一個月 (下個月),該月共有幾天

ps: 取當月最後一天可以透過
Carbon::parse(‘2022-02-01’)->lastOfMonth() // 取得 2022-02-28
Carbon::parse(‘2024-02-01’)->lastOfMonth() // 取得 2022-02-29


實際上解決方式為

Carbon::parse(‘2022-01-30’)->addMonthsNoOverflow() // 取得下個月,使用相對應日期
2022-02-28
Carbon::parse(‘2022-01-30’)->addMonthsNoOverflow()->day(5) // 取得下個月並指定日期 2022-02-05


結論

處理月份或年份時可以加上 NoOverflow()
e.g.
addMonthsNoOverflow()
addYearNoOverflow()

就目前來說,PHP, javascript 原生函式都沒辦法直接解決
透過 Library 解決比較快
php > Carbon
js > Moment.js, Days.js

1個讚