2012-08-03 166 views
0

我需要幫助。 我做了一個shell腳本,你以YYYYMMDD格式提前3天的日期並告訴我它是否正確。 我的問題是。我可以減去日期命令3天嗎? 謝謝。命令日期腳本shell bsh/ksh

+0

你想使用date命令從給定的日子。減去3天? – askmish 2012-08-03 10:10:07

回答

2

你可以測試:

DATE="20120803" 
date -d @$((`date -d "$DATE" +%s` - (3*24*60*60))) 
+0

抱歉,但是... date:opciónno permitida - d sintaxis:date [-u] ddmmHHMM [[cc] aa] [.SS] date [-u] [+ format] date -a [ - ] sss [.fff] date:opciónno permitida - d sintaxis:date [-u] ddmmHHMM [[cc] aa] [.ss] date [-u] [+ format] date -a [ - ] sss [.fff] – canredondocity 2012-08-03 10:26:47

+1

似乎爲我工作,'date --version'給你什麼? – Vodun 2012-08-03 10:31:44

+0

我的操作系統是solaris – canredondocity 2012-08-03 11:31:42

0

雖然你可以使用日期命令來做到這一點(見Guillame's excellent answer)它可能是值得考慮的腳本語言如Perl更有效地完成更復雜的東西。

例如看到this SO答案,使用PerlDateTime.pm模塊:

use DateTime; 
my $date = DateTime->now; 
$date->subtract(days => 3); 
print $date->ymd; 
+0

用途:no encontrado my:no encontrado – canredondocity 2012-08-03 10:39:27

+1

@canredondocity這是_perl_,不是shell腳本。你需要_DateTime.pm_模塊。 – scai 2012-08-03 11:12:06

+0

回答修正,以更清晰,這是Perl的 – 2012-08-03 12:03:46

1

對於花哨的解決方案:

INPUT="20120803" 
INPUT_SECONDS=$(date -d "$INPUT" +%s) 
THREEDAYSAGO_SECONDS=$(date -d "3 days ago" "+%s") 

if [ $INPUT_SECONDS -lt $THREEDAYSAGO_SECONDS ]; then 
    echo "too early :(" 
fi 
+0

日期:opción沒有permitida - d sintaxis:日期[-u] ddmmHHMM [[CC] AA] [SS] 日期[-u] [+格式] 日期-a [ - ] sss [.fff] date:opciónno permitida - d sintaxis:date [-u] ddmmHHMM [[cc] aa] [.SS] date [-u] [+ format] date -a [ - ] sss [.fff] 太早:( – canredondocity 2012-08-03 11:03:27

+0

這裏有效,請提供有意義的錯誤說明,包括您的輸入。 – scai 2012-08-03 11:17:50