İşleme tarihine göre önceki ayın bitiş tarihini nasıl alabilirim?
Örnekler:
- İşlem tarihi = 15jan2015
- Beklenen tarih = 31dec2014,
- İşlem tarihi = 10feb2015
- Beklenen tarih = 31jan2015
İşleme tarihine göre önceki ayın bitiş tarihini nasıl alabilirim?
Örnekler:
Yanıtlar:
GNU ile date:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
Bazı mermilerin tarih manipülasyonu için yerleşik desteği vardır:
İle ksh93:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
İle 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
Bunu yapmanın birçok yolu var ; İşte bulduğum en basit olanı (burada GNU varsayalım 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'. Bir hata alıyorsunuz çünkü orada 2011-12-30 yoktu. Yani, gün ofseti takvim zamanında yapıldı. 2011-12-31 eksi 31 gün 2011-11-30 verir, çünkü 31 kapalı 31 alır. Geçerli saatten 31 * 24 * 60 * 60 * 60 saniye sürmez. İle karşılaştır TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'size, bu defa 29th, veren, tarih bunun 24 * 60 * 60 * 60 saniye önce oldu.
BSD dateyardımcı programını kullanan Mac OS'de çalışan bir sürüm :
date -v1d -v-1d +%d%b%Y
Argümanlar sırayla uygulanır. Bir tarihin bir argümandan diğerine aktarıldığını hayal edebilirsiniz. Örneğin:
date) -> 2017-03-06-v1d) -> 2017-03-01-v-1d)-> 2017-02-28+%d%b%Y) -> 28Şub.2017Sen kullanarak aylar ileri veya geri herhangi bir sayıda ulaşabilir date -v-1m -v1d -v-1dyerine -1mileriye ay geriye doğru veya sayısı ile ( +1mistediğiniz).
Bu genel cevap. Bu soru özellikle başlangıç tarihine göre tarihleri soruyor. Mac OS / BSD tarih yardımcı programı, başlangıç için bir tarih damgası sağlamanıza izin vermez, ancak her tarih öğesini ayrı ayrı ayarlayabilirsiniz:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y -> 31Aralık2014
Bu kodu kullanmayı deneyin
date -d "-$(date +%d) days month" +%Y-%m-%d