在Bash中获取日期(当前时间的前一天)

con*_*dor 157 unix bash solaris date

如何在Bash中打印当前时间前一天的日期?

gho*_*g74 250

如果你有GNU日期,我理解正确

$ date +%Y:%m:%d -d "yesterday"
2009:11:09
Run Code Online (Sandbox Code Playgroud)

要么

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
Run Code Online (Sandbox Code Playgroud)

  • OSX上的`date -v-1d`(减号),`-v + 1d`(加号) (11认同)
  • 不要认为这适用于FreeBSD或OS X. (9认同)
  • 对于具有日期函数的Ubuntu的用法:$(日期+%Y:%m:%d -d"1天前"),输出为:2013:04:21.如果你想要10天之前的日期,你可以使用$(日期+%Y:%m:%d -d"10天前")或$(日期+%Y:%m:%d -d"10一天前") (3认同)
  • 我发现大多数都是建议的答案,但在 Solaris 的日期中找不到 -d 开关 (2认同)
  • 这个bash函数适用于Linux和OSX.基本上它首先尝试GNU Linux风格.如果失败则尝试OSX风格.使用您想要日期的过去天数的参数调用它.如果你不传递任何参数,它假设为0天.这段代码是单行的,因此剪切和粘贴应该可以工作 - 没有假设的行结尾.`date_days_past(){days_past = $ {1:-0}; 如果!date -v - $ {days_past} d +%Y%m%d 2>/dev/null; 然后约会--date =" - $ {days_past} day"+%Y%m%d; fi}` (2认同)

小智 49

如果您有BSD(OSX),date您可以这样做:

date -j -v-1d
Wed Dec 14 15:34:14 CET 2011
Run Code Online (Sandbox Code Playgroud)

或者,如果您想在任意日期进行日期计算:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
Run Code Online (Sandbox Code Playgroud)


sil*_*ent 41

date --date='-1 day'
Run Code Online (Sandbox Code Playgroud)

  • MacOS Sierra上的Erros:`date:非法选项 - -` (4认同)
  • 你需要通过`coreutils`包安装`date`的GNU版本,以使这个语法在macOS上运行.如果您使用Homebrew,可以通过`brew install coreutils`安装它,之后您应该可以通过`gdate`命令使用GNU日期.请参阅:https://www.topbug.ne​​t/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/ (2认同)
  • 对于macOS,您可以使用`date -v -1d`(看`man date`) (2认同)

Mav*_*ick 16

MAC OSX

对于昨天的日期:

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

其中1d定义当前日减去1天.同样的,

date -v-1w +%F - 前一周的日期

date -v-1m +%F - 上个月的日期

如果你有GNU日期,

date --date="1 day ago"
Run Code Online (Sandbox Code Playgroud)

更多信息:https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html


小智 7

嗯,这是一个迟到的答案,但这似乎工作!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;
Run Code Online (Sandbox Code Playgroud)


sur*_*oni 7

date -d "yesterday" '+%Y-%m-%d'
Run Code Online (Sandbox Code Playgroud)

或者

date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
Run Code Online (Sandbox Code Playgroud)


Pet*_*ist 6

高级Bash脚本编写指南

date +%Y:%m:%d -d "yesterday"
Run Code Online (Sandbox Code Playgroud)

有关日期格式的详细信息请参见手册页日期

date --date='-1 day'
Run Code Online (Sandbox Code Playgroud)


con*_*dor 5

抱歉没有在 Solaris 系统上提及 I。因此,-date 开关在 Solaris bash 上不可用。

我发现我可以通过时区的小技巧获得上一个日期。

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
Run Code Online (Sandbox Code Playgroud)