LoginSignup
45
36

More than 3 years have passed since last update.

date コマンドの日付指定頻出パターン

Last updated at Posted at 2016-07-02

Linux の date コマンドで今日/明日/昨日や月末や月初、翌月曜日などを求める方法を紹介します。

基本

引数を何も指定しないと「今」の時刻が出力されます。

$ date
2016年  7月  2日 土曜日 22:31:39 JST

基準日の指定

基準日は --date オプションで指定します。

$ date --date '2016-01-01'
2016年  1月  1日 金曜日 00:00:00 JST

日付の相対指定

例えば「 7 日前 」のような相対的な指定も可能です。

$ date --date '7 days ago'
2016年  6月 25日 土曜日 23:21:31 JST

基準日からの相対指定

次のように基準日と相対指定を組み合わせることが出来ます。

$ date --date '7 days ago 2016-07-07'
2016年  6月 30日 木曜日 00:00:00 JST

出力フォーマットを指定する

フォーマットの指定は「 +%Y-%m-%d 」のように「 + 」から始まるところがポイントです。

$ date '+%Y-%m-%d'
2016-07-02

日付指定の例

翌日

$ date '+%Y-%m-%d' --date '1 day'
2016-07-03
$ date '+%Y-%m-%d' --date '1 days'
2016-07-03
$ date '+%Y-%m-%d' --date 'tomorrow'
2016-07-03

前日

$ date '+%Y-%m-%d' --date '1 day ago'
2016-07-01
$ date '+%Y-%m-%d' --date '1 days ago'
2016-07-01
$ date '+%Y-%m-%d' --date 'yesterday'
2016-07-01

N 日後

日付には 0 や負数を指定することも出来ます。

$ date '+%Y-%m-%d' --date '3 days'
2016-07-05
$ date '+%Y-%m-%d' --date '2 days'
2016-07-04
$ date '+%Y-%m-%d' --date '1 days'
2016-07-03
$ date '+%Y-%m-%d' --date '0 days'
2016-07-02
$ date '+%Y-%m-%d' --date '-1 days'
2016-07-01

N 日前

$ date '+%Y-%m-%d' --date '3 days ago'
2016-06-29
$ date '+%Y-%m-%d' --date '2 days ago'
2016-06-30
$ date '+%Y-%m-%d' --date '1 days ago'
2016-07-01
$ date '+%Y-%m-%d' --date '0 days ago'
2016-07-02
$ date '+%Y-%m-%d' --date '-1 days ago'
2016-07-03

特定の日を基準とした翌日

基準日の指定と相対指定を組み合わせることで、特定の日を基準とした翌日を求めることが出来ます。

$ date '+%Y-%m-%d' --date '1 day 2016-07-01'
2016-07-02
$ date '+%Y-%m-%d' --date '1 days 2016-07-01'
2016-07-02
$ date '+%Y-%m-%d' --date 'tomorrow 2016-07-01'
2016-07-02

特定の日を基準とした前日

$ date '+%Y-%m-%d' --date '1 day ago 2016-07-01'
2016-06-30
$ date '+%Y-%m-%d' --date '1 days ago 2016-07-01'
2016-06-30
$ date '+%Y-%m-%d' --date 'yesterday 2016-07-01'
2016-06-30

月初(ある月の 1 日)

出力フォーマットを指定するときに、日付部分を「 01 」とします。

$ date '+%Y-%m-01' --date '-2 months'
2016-05-01
$ date '+%Y-%m-01' --date '-1 months'
2016-06-01
$ date '+%Y-%m-01'
2016-07-01
$ date '+%Y-%m-01' --date '1 months'
2016-08-01
$ date '+%Y-%m-01' --date '2 months'
2016-09-01

月末(ある月の最終日)

月末は「月初(ある月の 1 日)」の「 1 日前 」として求めます。

$ date '+%Y-%m-%d' --date "1 days ago $(date '+%Y-%m-01' --date '-2 months')"
2016-04-30
$ date '+%Y-%m-%d' --date "1 days ago $(date '+%Y-%m-01' --date '-1 months')"
2016-05-31
$ date '+%Y-%m-%d' --date "1 days ago $(date '+%Y-%m-01')"
2016-06-30
$ date '+%Y-%m-%d' --date "1 days ago $(date '+%Y-%m-01' --date '1 months')"
2016-07-31
$ date '+%Y-%m-%d' --date "1 days ago $(date '+%Y-%m-01' --date '2 months')"
2016-08-31

今週の N 曜日

$ date '+%Y-%m-%d' --date 'sunday'
2016-07-03
$ date '+%Y-%m-%d' --date 'monday'
2016-07-04
$ date '+%Y-%m-%d' --date 'tuesday'
2016-07-05
$ date '+%Y-%m-%d' --date 'wednesday'
2016-07-06
$ date '+%Y-%m-%d' --date 'thursday'
2016-07-07
$ date '+%Y-%m-%d' --date 'friday'
2016-07-08
$ date '+%Y-%m-%d' --date 'saturday'
2016-07-09

次の N 曜日

「今週の N 曜日」との違いは、今日が日曜日の場合に来週の日曜日の日付となる点です。

$ date '+%Y-%m-%d' --date 'next sunday'
2016-07-10
$ date '+%Y-%m-%d' --date 'next monday'
2016-07-04
$ date '+%Y-%m-%d' --date 'next tuesday'
2016-07-05
$ date '+%Y-%m-%d' --date 'next wednesday'
2016-07-06
$ date '+%Y-%m-%d' --date 'next thursday'
2016-07-07
$ date '+%Y-%m-%d' --date 'next friday'
2016-07-08
$ date '+%Y-%m-%d' --date 'next saturday'
2016-07-09

年末

$ date '+%Y-12-31'
2020-12-31

元旦

$ date '+%Y-01-01'
2020-01-01

次の元旦

$ date '+%Y-01-01' --date 'next year'
2021-01-01

参考情報

45
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
36