Jak uzyskać datę zakończenia poprzedniego miesiąca na podstawie daty przetwarzania?
Przykłady:
- Data przetwarzania = 15jan2015
- Oczekiwana data = 31 grudnia 2014 r.,
- Data przetwarzania = 10 lutego 2015 r
- Oczekiwana data = 31jan2015
shell-script
użytkownik128856
źródło
źródło
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Wystąpił błąd, ponieważ nie było tam 30.12.2011. Oznacza to, że przesunięcie dnia zostało wykonane w czasie kalendarzowym. 2011-12-31 minus 31 dni daje ci 2011-11-30, ponieważ bierze 31 z 31. Nie bierze 31 * 24 * 60 * 60 * 60 sekund z bieżącego czasu. Porównaj z tym,TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
co daje ci 29., czyli tym razem datę, która była 24 * 60 * 60 * 60 sekund temu.Oto wersja działająca w systemie Mac OS, która korzysta z
date
narzędzia BSD :date -v1d -v-1d +%d%b%Y
Argumenty są stosowane w kolejności. Możesz sobie wyobrazić, że data jest przekazywana z jednego argumentu do drugiego. Na przykład:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 2017-02-28+%d%b%Y
) -> 28 lutego 2017Możesz dotrzeć do dowolnej liczby miesięcy do przodu lub do tyłu
date -v-1m -v1d -v-1d
, zastępując-1m
ją liczbą miesięcy do tyłu lub do przodu (+1m
), którą chcesz.To ogólna odpowiedź. To pytanie dotyczy konkretnie dat względem daty początkowej. Narzędzie daty w systemie Mac OS / BSD nie pozwala na dostarczenie znacznika danych na początek, ale każdy element daty można ustawić osobno:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31 grudnia 2014 rźródło
Spróbuj użyć tego kodu
źródło