如何添加 X 天日期并获取新日期?

154 linux bash shell-script date

我有 Linux ( RH 5.3 ) 机器

我需要添加/计算 10 天加上日期,这样我就会得到新的日期(到期日期))

例如

 # date 
 Sun Sep 11 07:59:16 IST 2012
Run Code Online (Sandbox Code Playgroud)

所以我需要得到

     NEW_expration_DATE = Sun Sep 21 07:59:16 IST 2012
Run Code Online (Sandbox Code Playgroud)

请建议如何计算新的到期日期(使用 bash 、 ksh 或操纵日期命令?)

小智 211

您可以只使用-d开关并提供要计算的日期

date
Sun Sep 23 08:19:56 BST 2012
NEW_expration_DATE=$(date -d "+10 days")
echo $NEW_expration_DATE
Wed Oct 3 08:12:33 BST 2012 
Run Code Online (Sandbox Code Playgroud)
  -d, --date=STRING
          display time described by STRING, not ‘now’
Run Code Online (Sandbox Code Playgroud)

这是一个非常强大的工具,因为您可以执行以下操作

date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 03:29:16 BST 2012
Run Code Online (Sandbox Code Playgroud)

或者

TZ=IST date -d "Sun Sep 11 07:59:16 IST 2012+10 days"
Fri Sep 21 07:59:16 IST 2012
Run Code Online (Sandbox Code Playgroud)

或者

prog_end_date=`date '+%C%y%m%d' -d "$end_date+10 days"`
Run Code Online (Sandbox Code Playgroud)

所以如果 $end_date=20131001 那么 $prog_end_date=20131011

  • 在 OS X 上使用内置日期时,您将收到错误消息。使用 `brew install coreutils` 来安装 GNU 的日期函数 `gdate`。 (8认同)
  • 谢谢!!您的示例应该在 GNU `date` 信息页面中! (5认同)
  • 不起作用:`$ docker run -it bash bash bash-5.0# date -d "+10 days" date: invalid date '+10 days' bash-5.0# ` (2认同)
  • @ChristianBongiorno 它确实有效,即使不是几十年,也已经工作了好几年了。该问题几乎肯定与您的环境有关。 (2认同)

qua*_*nta 49

您可以使用“+x 天”作为格式字符串:

$ date -d "+10 days"
Run Code Online (Sandbox Code Playgroud)


小智 28

$ date -v -1d
Run Code Online (Sandbox Code Playgroud)

为了使用 date 命令获得 1 天的回溯日期:

$ date -v -1d
Run Code Online (Sandbox Code Playgroud)

它会给 (current date -1) 表示 1 天前。

$ date -v +1d
Run Code Online (Sandbox Code Playgroud)

这将给 (current date +1) 表示 1 天后。

类似地,可以使用以下编写的代码代替“d”来找出年、月等。

y-Year
m-Month 
w-Week 
d-Day 
H-Hour 
M-Minute  
S-Second
Run Code Online (Sandbox Code Playgroud)

  • 这适用于我的 Mac,但不适用于我们的 Gentoo 服务器。 (9认同)
  • 这不适用于 Ubuntu 15.10 或 RedHat 6.6。我认为它也不适用于 RH5.3。原因:“-v”和“-1d”不是“日期”的有效开关 (9认同)
  • 这似乎是用于 `date` 的 Unix/BSD 语法,而 GNU 的 `date`(许多 BSD 上的 `gdate`)不支持它。GNU 的 `date` 使用已接受答案中的语法。永远记住:GNU 不是 Unix! (2认同)

Pau*_*ice 5

date由于时区混乱,我放弃了 GNU命令,转而使用 python。

python -c "import datetime, dateutil.parser; print((dateutil.parser.parse(\"$myDate\") + datetime.timedelta(days=10)).isoformat())"
Run Code Online (Sandbox Code Playgroud)

也许这有点矫枉过正,但它很容易阅读、理解和根据需要进行修改。

dateutil.parser.parse不是 python 标准库的一部分,所以你必须pip install dateutil;或者您可以使用datetime.datetime.fromisoformat,但您需要更加小心格式。