रेल 3.2.8 - मैं रेल से सप्ताह का नंबर कैसे प्राप्त करूं? - रूबी, रूबी-ऑन-रेल -3

मैं जानना चाहता हूं कि रेल से वर्तमान सप्ताह संख्या कैसे प्राप्त करें और मैं इसे कैसे कुशल बना सकता हूं:

  1. सप्ताह की संख्या का अनुवाद तिथि में करें।
  2. सप्ताह संख्या के आधार पर एक अंतराल बनाओ।

धन्यवाद।

उत्तर:

जवाब के लिए 43 № 1

उपयोग strftime:

%U - वर्ष की सप्ताह संख्या। सप्ताह रविवार से शुरू होता है। (00..53)
%W - वर्ष की सप्ताह संख्या। सप्ताह सोमवार से शुरू होता है। (00..53)

Time.now.strftime("%U").to_i # 43

# Or...

Date.today.strftime("%U").to_i # 43

यदि आप चाहते हैं जोड़ना 43 सप्ताह (या दिन, साल, मिनट, आदि ...) एक तिथि के लिए, आप उपयोग कर सकते हैं 43.weeks, ActiveSupport द्वारा प्रदान किया गया:

irb(main):001:0> 43.weeks
=> 301 days

irb(main):002:0> Date.today + 43.weeks
=> Thu, 22 Aug 2013

irb(main):003:0> Date.today + 10.days
=> Sun, 04 Nov 2012

irb(main):004:0> Date.today + 1.years # or 1.year
=> Fri, 25 Oct 2013

irb(main):005:0> Date.today + 5.months
=> Mon, 25 Mar 2013

जवाब के लिए 11 № 2

आप से दूर रहना चाहते हैं strftime("%U") तथा "%W"

इसके बजाय, उपयोग करें Date.cweek!

समस्या यह है कि, यदि आप कभी भी एक सप्ताह का नंबर लेना चाहते हैं और इसे किसी तारीख में परिवर्तित करना चाहते हैं, strftime जीता "आपको एक मूल्य नहीं देता है जिसे आप वापस भेज सकते हैं Date.commercial

Date.commercial उन मानों की एक श्रृंखला की अपेक्षा करता है जो 1 आधारित हैं। Date.strftime("%U|%W") एक मान देता है जो 0 आधारित है। आपको लगता है कि आप इसे +1 कर सकते हैं और ठीक हो सकते हैं। 53 सप्ताह होने पर समस्या आपको एक साल के अंत में मार जाएगी। (जैसा कि अभी हुआ ...)

उदाहरण के लिए, चलो दिसंबर 2015 के अंत में देखते हैं और एक सप्ताह की संख्या प्राप्त करने के लिए अपने दो विकल्पों से परिणाम:

Date.parse("2015-12-31").strftime("%W") = 52
Date.parse("2015-12-31").cweek = 53

अब, उस सप्ताह संख्या को एक तारीख में परिवर्तित करने के लिए देखते हैं ...

Date.commercial(2015, 52, 1) = Mon, 21 Dec 2015
Date.commercial(2015, 53, 1) = Mon, 28 Dec 2015

यदि आप अंधेरे से केवल उस दिनांक को +1 करते हैं जिसे आप Date.commercial पर पास करते हैं, तो आप अन्य स्थितियों में एक अमान्य तिथि समाप्त कर देंगे:

उदाहरण के लिए, दिसंबर 2014:

Date.commercial(2014, 53, 1) = ArgumentError: invalid date

यदि आपको कभी भी उस सप्ताह की संख्या को किसी तारीख में परिवर्तित करना है, तो केवल एकमात्र निश्चित तरीका उपयोग करना है Date.cweek


जवाब के लिए 4 № 3
date.commercial([cwyear=-4712[, cweek=1[, cwday=1[, start=Date::ITALY]]]]) → date
Creates a date object denoting the given week date.

The week and the day of week should be a negative
or a positive number (as a relative week/day from the end of year/week when negative).
They should not be zero.

अंतराल के लिए

require "date"

def week_dates( week_num )
year = Time.now.year
week_start = Date.commercial( year, week_num, 1 )
week_end = Date.commercial( year, week_num, 7 )
week_start.strftime( "%m/%d/%y" ) + " - " + week_end.strftime("%m/%d/%y" )
end

puts week_dates(22)

ईजी: इनपुट (सप्ताह संख्या): 22

आउटपुट: 06/12/08 - 06/19/08

क्रेडिट: सिप कोर्टलिंग http://www.ruby-forum.com/topic/125140


जवाब के लिए 2 № 4

Date#cweek ऐसा लगता है कि आईएसओ -8601 सप्ताह संख्या (सोमवार-आधारित सप्ताह) जैसी है %V स्ट्रेटटाइम (एक टिप्पणी में @ रोबबान द्वारा उल्लिखित)।

उदाहरण के लिए, सप्ताह के सोमवार और रविवार मैं इसे लिख रहा हूं:

[ Date.new(2015, 7, 13), Date.new(2015, 7, 19) ].map { |date|
date.strftime("U: %U - W: %W - V: %V - cweek: #{date.cweek}")
}

# => ["U: 28 - W: 28 - V: 29 - cweek: 29", "U: 29 - W: 28 - V: 29 - cweek: 29"]

संबंधित सवाल
सबसे लोकप्रिय