web-dev-qa-db-ja.com

bashスクリプトで日付をインクリメントする方法

日付(yyyy-mm-dd)の引数を取るbashスクリプトがあります

私はそれを秒に変換します

startdate="$(date -d"$1" +%s)";

私がする必要があるのは、エポックの日付を1日ずつ増やしてからmm-dd-yyyyの形式で表示するたびに8回繰り返すことです

28
JAyenGreen

dateコマンドの機能を使用して、既存の日付に日を追加します。

以下:

DATE=2013-05-25

for i in {0..8}
do
   NEXT_DATE=$(date +%m-%d-%Y -d "$DATE + $i day")
   echo "$NEXT_DATE"
done

生成するもの:

05-25-2013
05-26-2013
05-27-2013
05-28-2013
05-29-2013
05-30-2013
05-31-2013
06-01-2013
06-02-2013

これはあなたのケースではうまく機能しますが、yyyymmddなどの他の日付形式は日付文字列に「UTC」を含める必要がある場合があります(例:date -ud "20130515 UTC + 1 day"

66
swdev
startdate=$(date -d"$1" +%s)
next=86400 # 86400 is one day

for (( i=startdate; i < startdate + 8*next; i+=next )); do
     date -d"@$i" +%d-%m-%Y
done

今日から日数を増減するもう1つの方法は、もう少しコンパクトです。

$ date %y%m%d ## show the current date
$ 20150109
$ ## add a day:
$ echo $(date %y%m%d -d "$(date) + 1 day")
$ 20150110
$ ## Subtract a day:
$ echo $(date %y%m%d -d "$(date) - 1 day")
$ 20150108
$ 
1
Bill Matsoukas

Bashスクリプトで日付をインクリメントし、年、月、および日付に基づいてフォルダー構造を作成して、コマンドライン出力から多数のファイルを整理します。

for m in {0..100}
do
    folderdt=$(date -d "Aug 1 2014 + $m days" +'%Y/%m/%d')
    procdate=$(date -d "Aug 1 2014 + $m days" +'%Y.%m.%d')
    echo $folderdt
    mkdir -p $folderdt
    #chown <user>:<group> $folderdt -R
    cd $folderdt
    #commandline --process-date $procdate
    cd -
done
1
Benoy G

日を増やすのはそれほど簡単ではありません。通常、グレゴリオ暦の日付をユリウス暦の日付に変換することによって行われます。その後、日を増やすことができます。その後、グレゴリオ暦の日付を計算します。コードの例を次に示します。

http://it.toolbox.com/wiki/index.php/Convert_a_date_to_a_Julian_day

http://it.toolbox.com/wiki/index.php/Convert_a_Julian_day_to_a_date

0
ceving