如何在bash脚本中增加日期

JAy*_*een 30 bash date

我有一个bash脚本,它接受一个日期的参数(yyyy-mm-dd)

我把它转换为秒

startdate="$(date -d"$1" +%s)";
Run Code Online (Sandbox Code Playgroud)

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

swd*_*dev 68

使用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
Run Code Online (Sandbox Code Playgroud)

生产:

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
Run Code Online (Sandbox Code Playgroud)

请注意,这适用于您的情况,但其他日期格式(如yyyymmdd)可能需要在日期字符串中包含"UTC"(例如date -ud "20130515 UTC + 1 day")

  • 也许要指出,这不能跨平台移植。-d选项适用于GNU date(即Linux等),但不适用于* BSD date(MacOS等)。 (3认同)
  • 我能够在 Ubuntu 机器中成功地以“yyyymmdd”格式增加日期,而无需使用 UTC,使用 `date +%Y%m%d -d "20130515 + 1 day"` (2认同)
  • @tripleee:你是对的!以下是如何使用 macOS 的 [`date`](https://www.unix.com/man-page/FreeBSD/1/date/#neo-man-page-output) 添加日期: `date -v + 1d -jf %F 1999-12-31 +%F` 生成“2000-01-01”。 (2认同)

Ale*_*-A. 5

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
Run Code Online (Sandbox Code Playgroud)