いろんな言語・コマンドラインで,日付の足し算・引き算をする方法をまとめます.
例として,3月1日の1日前を計算を考えます.この計算は,うるう年があるので面倒です.たとえば
- 2021年3月1日の前日は 2月28日
- 2020年3月1日は前日は 2月29日
となりますが,これを計算してみます
python で日付の引き算:datetimeモジュール
from datetime import datetime, timedelta print( datetime(2021, 3, 1) + timedelta(days=-1) ) print( datetime(2020, 3, 1) + timedelta(days=-1) )
この実装はタイムゾーンの影響を受けません(考慮していません)
コマンドラインで date コマンドを使う方法
/usr/bin/date は実は日付の計算が出来ます
$ date --date="2021-03-01 -1 day" $ date --date="2020-03-01 -1 day"
dateコマンドの日付の処理は,環境変数経由でタイムゾーンの影響を受けるので注意が必要です
心配な場合は環境変数TZを指定しておきましょう
$ TZ=UTC date --date="2021-03-01 -1 day"
シェルスクリプトで日付計算が必要なら,実質 date コマンド一択になるでしょう.
コマンドラインで qalc コマンドを使う方法
ターミナルで動作する電卓コマンドだと次のようにします
$ qalc > date(2021,3,1) - 1day date(2021, 3) − (1 day) = "2021-02-28" > date(2020,3,1) - 1day date(2020, 3) − (1 day) = "2020-02-29"
C言語で計算:mktime()を使う方法
C言語で日付を計算するコードです
#include <stdio.h> #include <time.h> void add_days(int year, int month, int day, int offset){ struct tm t = {0}; t.tm_year = year - 1900; t.tm_mon = month - 1; t.tm_mday = day; t.tm_mday += offset; mktime(&t); printf("%s\n", asctime(&t)); } int main() { add_days(2021,3,1, -1); add_days(2020,3,1, -1); return 0; }
PHPで日付の計算:strtotime()
echo date("Y-m-d", strtotime("2021-3-1 -1 day")); echo date("Y-m-d", strtotime("2020-3-1 -1 day"));
PHPで日付の計算:DateTimeクラス
$date = new DateTime('2021-3-1'); $date->modify('-1 day'); echo $date->format('Y-m-d');