✨
MacとLinuxそれぞれでdateコマンド使って日付計算する
ターミナルでシェルワンライナー書くの楽しいですよね。
でも、MacとLinuxだとコマンドに差異があって、実行してみたら「そんなオプションはねえ」って怒られてしゅんってなった方大勢いらっしゃるんじゃないでしょうか。
これは、
- Macにデフォルトで入っているコマンドがBSD版で、
- LinuxはGNU版
- という差から生まれる悲劇なわけですが、今回は日付計算が苦手な私がよく使う
date
コマンドの日付計算で使う部分の差分だけをまとめてみます。
環境
- macOS Big Sur 11.6
- Docker 20.10.8
- Ubuntu VERSION="20.04.3 LTS (Focal Fossa)"
- imageとしてubunt:latestで適当に持ってきました
日時のフォーマット指定方法
こちらは基本的に共通の方法で指定可能です。
date '+%Y/%m/%d (%a)'
# 2021/11/14 (Sun)
Macのdate
コマンドだと、フォーマットの指定に使える書式文字列はstrftime
に準拠するのですが、ざっくり確認した感じ、GNUのdate
コマンドでも同じ書式文字列が使えるようです。
- strftimeマニュアル
- GNU dateコマンドマニュアル
Macで日付計算する
日付計算をしたい場合、Macに入っているBSD版のdate
コマンドでは以下を組み合わせて計算します。
-
-v
オプションを使う - 加算したい場合は
+
を使う - 減算したい場合は
-
を使う - 単位の指定は
-
y
・・・年 -
m
・・・月 -
w
・・・週 -
d
・・・日 -
H
・・・時 -
M
・・・分 -
S
・・・秒
-
# 109日後の表示する
date -v+109d '+%Y/%m/%d (%a)'
# 2022/03/03 (Thu)
Linuxで日付計算する
GNU版の場合はもっと直感的に記述することが可能です。
-
-d
オプションを使う - 加算したい場合は
ago
を使わない - 減算したい場合は
ago
を使う - 単位の指定は以下。末尾に
s
をつけても動くみたい。日本人に優しい。-
day
・・・年 -
month
・・・月 -
week
・・・週 -
day
・・・日 -
hour
・・・時 -
minute
・・・分 -
second
・・・秒
-
# 109日後の表示する
date -d '109 days' '+%Y/%m/%d (%a)'
# 2022/03/03 (Thu)
Discussion