Wie erhalte ich das Enddatum des Vormonats basierend auf dem Verarbeitungsdatum?
Beispiele:
- Verarbeitungsdatum = 15jan2015
- Voraussichtliches Datum = 31dec2014,
- Bearbeitungsdatum = 10feb2015
- Voraussichtliches Datum = 31jan2015
shell-script
user128856
quelle
quelle
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Sie erhalten eine Fehlermeldung, da dort kein 30.12.2011 vorhanden war. Das heißt, der Tagesversatz wurde zur Kalenderzeit vorgenommen. 2011-12-31 minus 31 Tage gibt Ihnen 2011-11-30, weil es 31 von 31 nimmt. Es dauert nicht 31 * 24 * 60 * 60 * 60 Sekunden von der aktuellen Zeit. VergleichenTZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
Sie mit dem 29., dh diesmal dem Datum, an dem es 24 * 60 * 60 * 60 Sekunden her war.Hier ist eine Version, die unter Mac OS funktioniert und das BSD-
date
Dienstprogramm verwendet:date -v1d -v-1d +%d%b%Y
Die Argumente werden der Reihe nach angewendet. Sie können sich vorstellen, dass ein Datum von einem Argument zum nächsten weitergeleitet wird. Beispielsweise:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 28.02.2017+%d%b%Y
) -> 28Feb2017Sie können eine beliebige Anzahl von Monaten vorwärts oder rückwärts erreichen
date -v-1m -v1d -v-1d
, indem Sie die gewünschte-1m
Anzahl von Monaten rückwärts oder vorwärts (+1m
) ersetzen .Das ist die generische Antwort. In dieser Frage werden speziell Daten zu einem Startdatum abgefragt. Mit dem Mac OS / BSD-Datumsdienstprogramm können Sie keinen Datenstempel angeben, ab dem Sie beginnen können. Sie können jedoch jedes Datumselement einzeln festlegen:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31Dez2014quelle
Versuchen Sie es mit diesem Code
quelle