在 Unix 中减去日期

Eri*_*tos 3 unix ksh date

有没有办法从日期中减去一个月或在 unix 中至少减去 30 天。

例子:

[yyy-mm-dd] - 30 天

2011-07-23 - 30 天

顺便说一下,日期可以是任何日期,具体取决于用户输入。

谢谢。

gle*_*man 5

对于任意日期,

$ date -d "2011-07-23 - 1 month" "+%F"
2011-06-23
$ date -d "2011-07-23 - 30 days" "+%F"
2011-06-23
$ date -d "2011-08-23 - 1 month" "+%F"
2011-07-23
$ date -d "2011-08-23 - 30 days" "+%F"
2011-07-24
Run Code Online (Sandbox Code Playgroud)

这是 GNU 日期


如果没有 GNU 日期,您可以退回到 perl。Time::Piece 和 Time::Seconds 模块应该在 perl 5.12 中可用

perl -MTime::Piece -MTime::Seconds -e '
    print "date\t-1 month\t-30 days\n";
    while (@ARGV) {
        my $t = Time::Piece->strptime(shift, "%Y-%m-%d");
        print $t->ymd, "\t";
        print $t->add_months(-1)->ymd, "\t";
        $t -= 30*ONE_DAY; 
        print $t->ymd, "\n";
    }
' 2011-07-23 2011-08-23
Run Code Online (Sandbox Code Playgroud)
date    -1 month    -30 days
2011-07-23  2011-06-23  2011-06-23
2011-08-23  2011-07-23  2011-07-24
Run Code Online (Sandbox Code Playgroud)