2016-06-30 20 views
2

Angenommen, heute ist Donnerstag, der 30. Juni 2016.Wie bekomme ich letzten Donnerstag, inklusive?

Dann date +%Y%m%d ist 20160630, date -d'last-thursday' +%Y%m%d ist 20160623 und date -d'next-thursday' +%Y%m%d ist 20160707.

Jedoch ist date -d'last-wednesday' +%Y%m%d20160629 und date -d'next-wednesday' +%Y%m%d ist 20160706.

Gibt es eine inklusive Version von {next,last}-*day die heutigen Datum zurückkehren würde, wenn heute Tage ist?

+0

Ich bin nicht bewusst, alternative Formen von '{next | last} - * Tag ', die heute umfasst. Es würde semantisch (sprachlich) keinen Sinn machen. "Nächste" und "letzte" würden in diesem Zusammenhang heute nicht in normalen Sprachbegriffen bedeuten. Warum wird es benötigt? Vielleicht ein Kontext ... Sie könnten immer ein einfaches benutzerdefiniertes Skript erstellen, um dieses Ergebnis zu erhalten. – lurker

+0

Wie sieht es mit dem heutigen Wochentag aus ('date +% w')? Wenn es zum Beispiel Donnerstag ist und du nach dem letzten Donnerstag suchst, dann bist du fertig. –

Antwort

2

Inclusive nächster Tag ist eingebaut, nur -d"Thursday" verwenden, (kein Präfix) und date wird today zurück, wenn heute Donnerstag oder am nächsten Donnerstag, wenn nicht.

Aber date hat keine inklusive letzte, so ist hier ein inklusive letzten Wochentag kludge Funktion:

ilast() { a=$(date -d'today' "+%A") ; b=$(date -d"$1" "+%A") ; \ 
     [ $a != $b ] && echo -n "last " ; echo $b ; } 

Test (die auch ilast ‚s Nutzung zeigt):

for d in Sun. Mon. Tue. Wed. Thu. Fri. Sat. ; do \ 
    echo -n $(ilast $d)" " ; \ 
    date -d"$(ilast $d)" "+%Y%m%d" ; \ 
done | column -t 

Ausgabe:

last  Sunday  20160626 
last  Monday  20160627 
last  Tuesday 20160628 
last  Wednesday 20160629 
Thursday 20160630 
last  Friday  20160624 
last  Saturday 20160625 

Die Funktion setzt $ ein zu today 's Wochentag und $ b zu 1 $' s Wochentag, die eine andere Wochentag wäre, es sei denn,$ 1 ist heutigen Wochentag. Wenn also die Wochentage $ und $ b nicht gleich sind, (sechs von sieben Tagen würden sie unterschiedlich sein), werden wir "last" dem langen Namen des Wochentages voranstellen. Wenn die Wochentage ein $ und $ bsind gleich, nicht gedruckt „letzte“, da (ein Tag von sieben), die Standard-inklusive nächsten bereits tut das gewünschte Sache.