45

我有一个 Bash 脚本,它采用格式为 yyyy-mm-dd 的日期参数。

我将其转换为秒

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

我需要做的是迭代八次,每次将纪元日期增加一天,然后以 mm-dd-yyyy 格式显示。

4

6 回答 6

93

使用该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")。

于 2013-09-09T21:34:15.197 回答
7
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
于 2013-09-09T20:56:48.967 回答
2

从今天开始增加或减少天数的另一种方式更紧凑:

$ 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
$ 
于 2015-01-09T21:15:25.600 回答
1

在 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
于 2016-01-13T02:50:23.147 回答
1

还有一种类似的方式,可能不如一天加86400秒那么快,但值得一试——

day="2018-07-01"
last_day="2019-09-18"
while [[ $(date +%s -d "$day") -le $(date +%s -d "${last_day}") ]];do 
    echo $i;    
    # here you can use the section you want to use
    day=$(date -d "$day next day" +%Y-%m-%d); 
done
于 2019-09-18T09:23:06.743 回答
0

增加天数并不容易。通常它是通过将公历日期转换为儒略日数来完成的。然后你可以增加一天。然后计算公历日期。这是示例代码:

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

于 2013-09-09T21:01:22.417 回答