月の週数を決定する方法


10

Linux CLIで、月の週数を取得する方法はありますか?たぶんこれを1つの単純な(のようなdate)コマンドで取得する別の方法があるでしょうか?1日目から7日目が第1週、8日目から14日目が第2週、などと仮定します。


月の週をどのように定義しますか?日数を7で割り、切り捨てますか?日曜日/月曜日/何が過ぎたか
mgorven 2012

たとえば、1日から7日は最初の1週間、7から14秒は2週目、14から21日は3番目、21日から月末は4番目の週です。日付nad ifの単純なbashスクリプトがこれに対する素晴らしい解決策であることは知っていますが、スクリプトを実行せずに1つのコマンドでそれを実行できるかどうか疑問に思っています。
B14D3 2012

@ B14D3「月の週」の定義はかなり粗いです-これを具体的に何に使用していますか?
voretaq7

1
何のために私は日付のために人を読んでいて、それが私の頭に浮かびました(時には私はとても愚かな考えを持っています)。では、より良い定義は何でしょうか?
B14D3 2012

回答:


21

dateあなたには、いくつかの外部の算術演算を必要とするので、このコマンドは、内部的にこれを行うことはできません。

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

編集:%とdの間にマイナス記号を追加しました


それはうまくいきますが、なぜこの算術が整数を返すのか理解できませんか?
B14D3 2012

2
Bashは整数演算のみを行います。
mgorven 2012

うわー、それを知りませんでした。Thx:D
B14D3 2012

4
正解です。29日目以降は月の5週目にあります。
mgorven 2012

5
コメントの書式を整えて見栄えをよくする方法がわかりません。とにかく、実装するのは素晴らしいアイデアですが、日付が08または09の場合、エラーが発生します:-bash:(09:値がベースには大きすぎます(エラートークンは "09")。数値が0で始まる場合、C言語では8進数として解釈されるため、08 09は無効です。私にとっての回避策は、%dから%eに変更することです。%eは、先頭の0を省略します:echo $((($(date +% e)-1)/ 7 + 1))
ShâuShắc2013

2

あなたはこれを使うことができます:

月曜日第一週の日

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

サンデーファーズウィークダティー

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

1

これを試して:

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

私にとっては単純に見えません:Dと今日の私に5
B14D3

1

ビクターサンチェスのソリューションを簡素化:

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

週を日曜日から開始する場合は、%Vを%Uに置き換えます。

btw:$((...))の代わりにexprを使用する必要がありました。これは、後者が先行ゼロのある数値を好まないようだからです。


0

クエストで外部ツールを受け入れる場合は、dateutilsを試してください。これは、月内の発生の概念を持っています。つまり、2012年4月27日は、2012年4月の第4金であり、これは、週の定義とちょうど一致します。その数を取得するには、以下を使用します。

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

%c(count)は、月内での出現の形式指定子です。またはさらに涼しくする

dconv today -f '%cth %a in %b %Y'
=>
  1st Wed in Sep 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.