Solaris:シェルスクリプトを介して、先月曜日、火曜日、...日曜日を検索

Solaris:シェルスクリプトを介して、先月曜日、火曜日、...日曜日を検索

たとえば、前の月曜日、火曜日、水曜日...今日の日付より前の場所を見つけることができるbashまたはkshルーチンを必死に探しています。また、純粋なSolaris Xで動作する必要がありますが、GNUの日付がわかりません。

例: 今日 = 木曜日 2013/01/17 最後の月曜日を探したいとしましょう。必ず返却する必要があります: 2013/01/14

私はこの特別な場合を除いて、すべての日に完全に機能するスクリプトをオンラインで見つけました。例:Today =木曜日2013/01/17結果を提供する必要がある最後の木曜日を探したいと思います:2013/01/10;今日の日付がまた取れましたね。

使用されるスクリプトは次のとおりです。

#!/bin/ksh

#Get the nbr of the current weekday (1-7)
DATEWEEK=`date +"%u"`
#Which previous weekday will we need (1-7)
WEEKDAY=$1
# Main part
#Get current date
DAY=`date +"%d"`
MONTH=`date +"%m"`
YEAR=`date +"%Y"`
#Loop trough the dates in the past
COUNTER=0
if [[ $DATEWEEK -eq $WEEKDAY ]] ; then
# I need to do something special for the cases when I want to find the date of the same day last week
  DAYS_BACK=168
  DAY=`TZ=CST+$DAYS_BACK date +%d`
  echo "DAY (eq) = $DAY"
else
    while [[ $DATEWEEK -ne $WEEKDAY ]] ; do
       COUNTER=`expr $COUNTER + 1`
       echo "Counter is: $COUNTER"
       DAYS_BACK=`expr $COUNTER \* 24`
       echo "DAYS BACK is: $DAYS_BACK"
       DAY=`TZ=CST+$DAYS_BACK date +%d`
       echo "DAY is: $DAY"
        if [[ "$DAY" -eq 0 ]] ; then
         MONTH=`expr "$MONTH" - 1`
           if [[ "$MONTH" -eq 0 ]] ; then
            MONTH=12
           YEAR=`expr "$YEAR" - 1`
           fi
         fi
       DATEWEEK=`expr $DATEWEEK - 1`
     if [[ $DATEWEEK -eq 0 ]]; then
     DATEWEEK=7
     fi
done
fi
echo $DAY/$MONTH/$YEAR

ベストアンサー1

私はそれをします:

perl -MPOSIX -le '
  @t=localtime;
  print strftime "%Y/%m/%d", 
    localtime time - 86400*(($t[6]-1+7-$ARGV[0])%7+1)' 4

(4は曜日、0は日曜日、4は木曜日)

perl通常、ポータブル日付操作に最も安全な選択です。

おすすめ記事