Wie erhalte ich das Enddatum des Vormonats basierend auf dem Verarbeitungsdatum?
Beispiele:
- Verarbeitungsdatum = 15jan2015
- Voraussichtliches Datum = 31dec2014,
- Bearbeitungsdatum = 10feb2015
- Voraussichtliches Datum = 31jan2015
Wie erhalte ich das Enddatum des Vormonats basierend auf dem Verarbeitungsdatum?
Beispiele:
Antworten:
Mit GNU date
:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
Einige Shells bieten integrierte Unterstützung für die Datumsmanipulation:
Mit ksh93
:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
Mit zsh
:
$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015
Es gibt viele Möglichkeiten , dies zu tun. Hier ist die einfachste, die ich gefunden habe (hier unter der Annahme von GNU date
):
$ date -d "-$(date +%d) days"
Fri Jul 31 16:07:23 EDT 2015
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. Vergleichen TZ=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
-> 31Dez2014
Versuchen Sie es mit diesem Code
date -d "-$(date +%d) days month" +%Y-%m-%d