2017-04-21 13 views
-1
endDate=`date +%m-%d-%Y` 
endDate=`expr $endDate -7` 
echo "$endDate" 

上記のコードはエラーですが、以下のコードは正しく動作します。私は上記の日付形式を使用したい。どうすればこれを達成できますか?シェルスクリプトの日付

TODAY=`date +%d` 
TODAY=`expr $TODAY - 7` 
echo $TODAY 

答えて

2

"expr:非整数引数"が表示されるエラーは、どのような問題が発生しているかを示すはずです。あなたが「04-14-2017」から7を引くと、あなたはあなたが期待するものを得られません。先週取得するには、「今」

endDate=`date -d '7 days ago' +"%m-%d-%Y"` 
echo $endDate 
+0

ありがとうChris – Satte

0

date +%dは数を返し、あなたから7を引くことができますので、コマンドのあなたの第二セットの動作の代わりに、デフォルトの特定の日付を取得するには-dフラグに渡すことができます数。 date +%m-%d-%Yは文字列を返し、文字列から7を引くことはできないため、最初のコマンドセットは失敗します。

dateコマンドの場合、特に夏時間のタイムゾーンを使用している場合は、適切かつ安全に日付計算を行うのは少し複雑です。 Date :: EzDateやDateTimeなどのPerlモジュールをお勧めします。

+0

これを適切に管理する適切な方法は、初期日付を1970(UTC)から秒に変換し、2番目の単位を単位として使用して最終的なUTCを希望の日付形式に変換することです – aicastell

関連する問題