2017-01-02 3 views
0

was ich will ist ein Zyklus von 4 Wochen in einem Bash-Skript
Meine Frage ist: Wie kann ich diese Woche Nummer im Zyklus kennen.
Woche x Montag: echo einer
Woche x + 1 Montag: echo zwei
Woche x + 2 Montag: echo drei
Woche x + 3 Montag: echo vier
wieder
Woche x + 4 Montag: echo eines und so weiterWochenzahl in einem 4-Wochen-Zyklus im Bash-Skript bestimmen

, was ich habe, ist die Epoche
(UTC), Donnerstag, 1. Januar 1970
folglich
(UTC), Montag, 5. Januar 1970 (I dieses 1 echo einstellen)

Irgendwelche Vorschläge? Das Konvertieren von Daten ist kein Problem. Nur eine allgemeine Idee ist in Ordnung.

+0

Was ist mit Monaten mit 5 Wochen bestimmten Tag Zyklus? z.B. Montag für Januar 2017? – Inian

Antwort

1

Ich denke, Sie erwarten so etwas tun, mit GNU date,

start_date=$(date -d "1970-01-05" '+%s') # Corresponding to 1 
end_date=$(date -d "2017-01-02" '+%s')  # Current week 

Anzahl der Wochen zwischen den Terminen

numberOfWeeks=$(((end_date - start_date)/(60*60*24*7))) 
printf "%s\n" "$numberOfWeeks" 
2452 

Jetzt die Woche, um zu bestimmen dies entspricht, tun

Für weitere Wochen auf der ganzen Linie, sagen. 4. Montag März 2017 die obige Berechnung verwendet wird, dh mit

end_date=$(date -d "2017-03-27" '+%s') 
printf "The week %s belongs to week %d" "$(date -d "2017-03-27")" "$(((numberOfWeeks%4) + 1))" 
The week Mon, Mar 27, 2017 12:00:00 AM belongs to week 1 

Ein weiteres Beispiel für die 3. Montag oder 2017 März

end_date=$(date -d "2017-03-20" '+%s') 
printf "The week %s belongs to week %d" "$(date -d "2017-03-20")" "$(((numberOfWeeks%4) + 1))" 
The week Mon, Mar 20, 2017 12:00:00 AM belongs to week 4 
+0

Ich habe es nicht getestet, aber funktioniert es seit Jahren mit 53 Wochen, zum Beispiel 2015? (Frage nur, weil ich gerade etwas von meinem Produktionscode repariert habe, der von modulo 4 abhängt und mein letztes Jahr Pflaster gerade gebrochen ist ...) –

+0

@JamesBrown: Habe es nicht selbst getestet, lass mich zu dir zurück kommen! – Inian

0

Sie das Datum Ausgabeformat kann die Wochennummer für die Ansicht:

function printweek { 
    weeknr=$(date '+%V' -d "+$1 weeks") 
    echo "$((weeknr%4))" 
} 

# Test 
for week in 0 1 2 3 4 5 6 30 31 32 33; do 
    echo "Week offset from today ${week} => $(printweek ${week})" 
done 

Dies funktioniert, wenn Sie jedes Jahr neu beginnen (erste Woche 1 wieder). Wenn Sie am 1. Januar weiter zählen wollen, wird das Skript schwieriger. Sie können die Lösung von @Inian betrachten.
Eine andere Option könnte die Ausgabe des letzten Laufs betrachten und eine %4 zur Wochennummer des letzten Laufs hinzufügen.

Verwandte Themen