こんにちは、阿久梨絵です!
日付の「 翌日 を求める」──それだけで、かつては例外処理の嵐だった。
月末、2月、うるう年、年末年始…人間にとっては自然な感覚でも、プログラムにとっては地雷原。
でも今は違う。
ライブラリと日付オブジェクトの進化で、翌日計算は“考えなくていい”時代に突入している。
昔:手作業で地雷を踏む日々
かつての日付処理は、こんな感じだった。
python
# 例:Pythonで翌日を求める(昔のやり方)
def get_next_day(year, month, day):
# 月ごとの日数
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# うるう年判定
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
days_in_month[1] = 29
day += 1
if day > days_in_month[month – 1]:
day = 1
month += 1
if month > 12:
month = 1
year += 1
return year, month, day
・うるう年を自分で判定
・月末を自分で判定
・年末の繰り上がりも自分で処理
つまり、人間がカレンダーを見て考えることを、全部コードに書く必要があった。
今:日付オブジェクトが全部やってくれる
現代の言語やライブラリは、日付を「計算可能なオブジェクト」として扱う。
翌日を求めるなら、たったこれだけ
#Python(`datetime`)
from datetime import datetime, timedelta
today = datetime(2025, 2, 28)
tomorrow = today + timedelta(days=1)
print(tomorrow.strftime(‘%Y-%m-%d’)) # → 2025-03-01
#JavaScript(`Date`)
const today = new Date(‘2025-02-28’);
const tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1);
console.log(tomorrow.toISOString().split(‘T’)[0]); // → 2025-03-01
#PHP(`DateTime`)
$today = new DateTime(‘2025-02-28’);
$today->modify(‘+1 day’);
echo $today->format(‘Y-m-d’); // → 2025-03-01
どれも月末・うるう年・年末年始を自動で処理してくれる。
しかも、コードが圧倒的に読みやすい。
さらに進化:人間っぽい日付処理ライブラリ
「翌日」だけじゃなく、「月末」「第2火曜日」「3営業日後」など、人間の感覚に近い処理をしたいなら、以下のライブラリが便利。
| 言語 | ライブラリ | 特徴 |
|---|---|---|
| JavaScript | date-fns | 軽量・関数型・読みやすい |
| JavaScript | luxon | タイムゾーン・フォーマットに強い |
| Python | pendulum | datetime互換・自然言語っぽいAPI |
| PHP | Carbon | DateTime拡張・直感的な操作が可能 |
日付処理は“考えない”時代へ
「翌日を簡単に求める」処理がスマートに書ける言語は、今どきのほぼすべての主要言語です。特に以下の言語では、標準ライブラリや人気の外部ライブラリが充実していて、月末・うるう年・年末年始などの例外を自動で処理してくれます。
日付処理が“賢い”言語一覧
| 言語 | 標準ライブラリ名 | 外部ライブラリ(おすすめ) | 備考 |
|---|---|---|---|
| Python | datetime, calendar | pendulum, arrow | timedeltaで翌日が簡単に計算可能 |
| JavaScript | Date | date-fns, luxon, dayjs | setDate()で自動繰り上がり処理 |
| PHP | DateTime | Carbon | modify('+1 day')が直感的 |
| Ruby | Date, Time | Chronic, ActiveSupport | Rails環境なら特に強力 |
| Java | LocalDate, Calendar | Joda-Time(古いが有名) | plusDays(1)で翌日処理 |
| C# (.NET) | DateTime | NodaTime | AddDays(1)でOK |
| Go | time | — | AddDate(0, 0, 1)で翌日 |
| Swift | Date, Calendar | — | Calendar.current.date(byAdding:) |
| Rust | chrono | — | date + Duration::days(1) |
特徴的なポイント
・どの言語も「日付オブジェクト+加算」で翌日が求まる
・月末やうるう年の判定は不要(ライブラリが吸収してくれる)
・外部ライブラリを使えば、さらに人間っぽい操作が可能(例:「第2火曜日」「3営業日後」など)
まとめ
「 翌日 を求める」──それだけで、かつてはコードの地雷原だった。
日付は“計算するもの”ではなく、“任せるもの”になった。
現代の言語やライブラリは、日付を「オブジェクト」として扱い、
加算・比較・フォーマット・タイムゾーンまで、人間の感覚に近い操作を可能にしてくれます。
阿久梨絵でした!
