Ayın hafta sayısı nasıl belirlenir


10

Linux CLI'da, ayın haftasının sayısını almanın bir yolu var mı? Belki bunu basit bir datekomutla almanın başka bir yolu var mı? Diyelim ki 1 ila 7 gün birinci hafta, 8 ila 14 gün ikinci hafta, vb.


Ayın haftasını nasıl tanımlıyorsunuz? Gün sayısı 7'ye bölünüp yuvarlandı mı? Pazar / Pazartesi / geçen her ne oldu?
mgorven

diyelim ki birinci haftası bir ila 7 gün arasında, 7 ila 14 ikinci hafta, üçüncü 14 ila 21 ve dördüncü haftasında 21 ila ayın sonunda. Ben tarih nad ile basit bash betiği bunun için güzel bir çözüm olduğunu biliyorum ama ben bir komut dosyası olmadan bir komut ile di olabilir merak ediyorum.
B14D3

@ B14D3 "ayın haftası" tanımınız oldukça kaba - bunu özellikle ne için kullanıyorsunuz?
voretaq7

1
Hiçbir şey için tarih için adamı okuyordum ve aklıma geldi (Bazen çok aptalca düşüncelerim var). Peki daha iyi bir tanım ne olacak?
B14D3

Yanıtlar:


21

dateBazı dış aritmetik ihtiyaç böylece komut, içten bunu yapamaz.

echo $((($(date +%-d)-1)/7+1))

Düzenleme:% ile d arasına eksi işareti eklendi


Bu iyi çalışıyor, ama neden bu aritmetik tamsayı döndürüyor anlamıyorum?
B14D3

2
Bash sadece tamsayı aritmetiği yapar.
mgorven

Wow bilmiyordu.
Teşekkürler

4
Bu doğru - 29+ gün ayın 5. haftasında.
mgorven

5
Üzgünüm, daha güzel görünmek için yorumu nasıl biçimlendireceğimi bilmiyorum. Her neyse, uygulanması harika bir fikir, ancak tarih 08 veya 09 ise, hataya neden olur: -bash: (09: taban için çok büyük (hata belirteci "09"). Bu, sayısal değer 0 ile başlıyorsa , C diline göre sekizlik sayı olarak yorumlanacaktır, bu nedenle 08 09 geçersiz. Benim için geçici çözüm% d'den% e'ye değişecek,% e önde gelen 0: echo $ ((($ (tarih +%) e) -1) / 7 + 1))
Shâu Shắc

2

Bunu kullanabilirsiniz:

Pazartesi İlk hafta günü

WEEKNUMBER=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))

Pazar firs hafta daty

WEEKNUMBER=$(( 1 + $(date +%U) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%U) ))

1

Bunu dene:

d=`date +%d` ; m=`date +%m` ; y=`date +%Y` ; cal $m $y | sed -n "3,$ p" | sed -n "/$d/{=;q;}"

benim için basit görünmüyor: D ve bugün bana 5
B14D3

1

Victor Sanchez'in çözümünü basitleştirmek:

expr 1 + $(date +%V) - $(date +%V -d $(date +%Y-%m-01))

Pazar günü başlayan haftaları istiyorsanız% V yerine% U yazın.

btw: $ ((...)) yerine expr kullanmak zorundaydı, çünkü daha sonraları başında sıfır olan sayılardan hoşlanmıyor gibi görünüyor.


0

Görevinizdeki harici araçları kabul ediyorsanız dateutils'i deneyin . Bu, ay içinde gerçekleşme tarihleri ​​kavramına sahip, yani 27 Nisan 2012, Nisan 2012'deki 4. Cum, sadece hafta tanımınıza denk geliyor. Bu numarayı almak için şunu kullanın:

dconv 2012-04-27 -f %c
=>
  04

%c(sayım), ay içindeki oluşumun biçim belirticisidir. Ya da daha serin olmak için deneyin

dconv today -f '%cth %a in %b %Y'
=>
  1st Wed in Sep 2012
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.