महीने के सप्ताह की संख्या का निर्धारण कैसे करें


10

लिनक्स सीएलआई पर, महीने के सप्ताह की संख्या प्राप्त करने का एक तरीका है? शायद एक सरल (जैसे date) कमांड के साथ इसे प्राप्त करने का एक और तरीका है ? मान लीजिए कि दिन 1 से 7 पहला सप्ताह है, दिन 8 से 14 दूसरा सप्ताह है, और इसी तरह।


आप महीने के सप्ताह को कैसे परिभाषित करते हैं? दिन संख्या 7 से विभाजित और नीचे गोल? रविवार / सोमवार की संख्या / जो भी बीत चुके हैं?
मॉर्गन

1 से 7 दिन के 1 सप्ताह से 7 से दूसरे सप्ताह, 14 से 21 तीसरे और महीने के चौथे से 21 वें सप्ताह के अंत तक कहते हैं। मुझे पता है कि तारीख के साथ सरल बाश स्क्रिप्ट अगर इस के लिए अच्छा समाधान है, लेकिन सोच रहा हूं कि क्या मैं एक स्क्रिप्ट के बिना एक कमांड के साथ कर सकता हूं।
B14D3

@ B14D3 आपके "महीने के सप्ताह" की परिभाषा बहुत मोटे है - आप इसके लिए विशेष रूप से क्या उपयोग कर रहे हैं?
voretaq7

1
कुछ भी नहीं के लिए मैं आदमी को पढ़ रहा था और मेरे दिमाग में आया (कभी-कभी मेरे पास इतने मूर्खतापूर्ण विचार हैं)। तो एक बेहतर परिभाषा क्या होगी?
B14D3

जवाबों:


21

dateताकि आप कुछ बाहरी गणित की जरूरत आदेश आंतरिक रूप से ऐसा नहीं कर सकते।

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

संपादित करें:% और d के बीच एक ऋण चिह्न जोड़ा गया


यह ठीक काम है, लेकिन मुझे समझ में नहीं आता कि यह अंकगणित पूर्णांक क्यों देता है?
B14D3

2
बैश केवल पूर्णांक अंकगणित करता है।
मॉर्गन

वाह पता नहीं था। Thx: D
B14D3

4
यह सही है - महीने के 5 वें सप्ताह में 29+ दिन हैं।
मॉर्गन

5
क्षमा करें, मुझे पता नहीं है कि टिप्पणी को प्रारूपित करने का तरीका कैसा है। वैसे भी, लागू करने के लिए बहुत अच्छा विचार है, हालांकि अगर तारीख 08 या 09 है, तो यह त्रुटि का कारण बनेगा: -बैश: (09: मूल्य आधार के लिए बहुत अच्छा है (त्रुटि टोकन "09" है)। ऐसा इसलिए है क्योंकि यदि संख्यात्मक मान 0 से शुरू होता है। , यह सी भाषा द्वारा अष्टक संख्या के रूप में संक्षिप्त किया जाएगा, इसलिए 08 09 अमान्य हैं। मेरे लिए, वर्कअराउंड को% d से% e में बदलना है,% e अग्रणी 0 को छोड़ देता है: echo $ (($ (date +%) e) -1) / 7 + 1))
Shuu Sh Sepc

2

आप इसका उपयोग कर सकते हैं:

सोमवार प्रथम सप्ताह का दिन

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

रविवार Firs सप्ताह डेटी

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

यदि आप अपनी खोज में बाहरी उपकरणों को स्वीकार करते हैं, तो खजूर का उपयोग करें । इसे घटना-महीने की तारीखों की धारणा मिल गई है, यानी 27 अप्रैल 2012 अप्रैल 2012 में 4 वें शुक्र है, जो सिर्फ आपके सप्ताह की परिभाषा के साथ मेल खाता है। उस नंबर का उपयोग करने के लिए:

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

%c(गिनती) घटना के लिए प्रारूप निर्दिष्ट करने वाला महीना है। या भी कूलर की कोशिश हो

dconv today -f '%cth %a in %b %Y'
=>
  1st Wed in Sep 2012
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.