jqで土日を判定するみたいなことができる
isoの日付からfromdate
でunixタイムスタンプへ変換しそれをgmtime
へ渡すと日時に関する配列が返ってくる
その中に曜日の情報も含まれている
よくある2020-08-01
のような形式のテキストを判定してみる
$ echo '{"start_date": "2020-08-01"}'| jq '.start_date+"T00:00:00Z"' "2020-08-01T00:00:00Z" $ echo '{"start_date": "2020-08-01"}'| jq '.start_date+"T00:00:00Z"|fromdate' 1596240000 $ echo '{"start_date": "2020-08-01"}'| jq '.start_date+"T00:00:00Z"|fromdate|gmtime' [ 2020, # 年 7, # 月(0~) 1, # 日 0, # 時 0, # 分 0, # 秒 6, # 曜日 213 # 通年での日数 ]
年、月(0~)、日、時、分、秒、曜日、通年での日数
といった感じで取得できるよう
日曜が0で土曜が6
休日と平日で集計する
試しに簡単な例を用意して集計してみる
- sample.json
$ cat sample.json [ {"date": "2020-08-01", "time": 1}, {"date": "2020-08-02", "time": 1}, {"date": "2020-08-03", "time": 1}, {"date": "2020-08-04", "time": 1}, {"date": "2020-08-05", "time": 1}, {"date": "2020-08-06", "time": 1}, {"date": "2020-08-07", "time": 1}, {"date": "2020-08-08", "time": 1}, {"date": "2020-08-09", "time": 1}, {"date": "2020-08-10", "time": 1} ]
$ cat sample.json| jq 'reduce .[] as $row ({}; .[$row.date+"T00:00:00Z"|fromdate|gmtime|map(in([6,0]))|.[6]|tostring] += $row.time)' { "false": 6, "true": 4 }
サンプルなのでここまで
false
は平日、true
は休日の合計ということになる