2015-01-13 8 views
7

मैंने अतीत में नीचे दिए गए फ़ंक्शन का उपयोग NSDateComponents का उपयोग किसी मौजूदा दिनांक पर एक विशिष्ट समय अंतराल पर जोड़ने के लिए किया है।एनएसडीएट में कितने हफ्तों को जोड़ना है?

(NSDate *)dateByAddingComponents:(NSDateComponents *)comps 
          toDate:(NSDate *)date 
         options:(NSCalendarOptions)opts 

iOS8 से सप्ताह मूल्य NSDateComponents के लिए हटा दिया गया है, जिसका मतलब है मैं हासिल नहीं कर सकते कि मैं क्या करना चाहते हैं: किसी दिए गए NSDate सप्ताह की एक निश्चित संख्या में कोई नया NSDate उत्पन्न करते हैं।

किसी भी मदद की सराहना की जाएगी।

+2

एक सप्ताह 7 दिन है। –

+0

क्या आपने 'weekOfYear' की कोशिश की है? – zaph

उत्तर

6

अद्यतन: जैसा कि जैफ ने अपने जवाब में कहा था, ऐप्पल वास्तव में प्रदान किए गए उत्तर के बजाय weekOfYear या weekOfMonth का उपयोग करने की अनुशंसा करता है। विवरण के लिए ज़ाफ का जवाब देखें।


आप शायद जल्दी से एहसास होगा कि आप इसे overthinking रहे हैं, लेकिन इस तरीके से भले ही सप्ताह मूल्य बहिष्कार किया गया है एक तारीख को सप्ताह की एक निश्चित संख्या जोड़ सकते हैं, उदाहरण के लिए:

NSDateComponents *comp = [NSDateComponents new]; 
int numberOfDaysInAWeek = 7; 
int weeks = 3; // <-- this example adds 3 weeks 
comp.day = weeks * numberOfDaysInAWeek; 

NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0]; 
+0

धन्यवाद। तुम सही हो मैं इसे खत्म कर रहा था। – Rich

+0

कोई समस्या नहीं है। ऐसा होता है :) –

+0

क्षमा करें, लेकिन इस उत्तर में गलत होने की संभावना है क्योंकि यह मानता है कि हर सप्ताह वास्तव में 7 दिन होता है। @Zaph का उत्तर सुरक्षित है। – rmaddy

-1

आप निम्न विधि के साथ NSDate पर एक वर्ग जोड़ सकते हैं:

- (NSDate *) addWeeks:(NSInteger)weeks 
{ 
    NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDateComponents *components=[[NSDateComponents alloc] init]; 
    components.day = weeks * 7; 

    return [gregorian dateByAddingComponents:components toDate:self options:0]; 
} 
+0

ऐप्पल को 'सप्ताह' हटा दिया गया था, इसे किसी अन्य रूप में 'एनएसडीएटी' में वापस न जोड़ें, जब आवश्यक हो तो दस्तावेज़ों के सुझाव के रूप में 'weekOfYear' का उपयोग करना है। – zaph

16

बस का उपयोग weekOfYear:

NSDateComponentsweek के लिए एप्पल डॉक्स:

डेप्रिकेशन वक्तव्य
उपयोग weekOfYear या weekOfMonth बजाय, आप क्या करना चाहते हैं पर निर्भर करता है।

NSDate *date = [NSDate date]; 
NSDateComponents *comp = [NSDateComponents new]; 
comp.weekOfYear = 3; 
NSDate *date1 = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:date options:0]; 
NSLog(@"date: %@", date); 
NSLog(@"date1: %@", date1); 

आउटपुट:

  
date: 2015-01-13 04:06:26 +0000 
date1: 2015-02-03 04:06:26 +0000 

यदि आप week का उपयोग आपको यह चेतावनी मिलती है:

'सप्ताह' अनुचित बताया गया है: पहली में ... पदावनत - उपयोग weekOfMonth या weekOfYear , जिस पर आपका मतलब है

weekOfMonth या weekOfYear का उपयोग डेल्टा के रूप में करते समय वे वही काम करते हैं। जहां वे अलग हैं, उन्हें सप्ताह की संख्या प्राप्त करने के लिए उपयोग किया जाता है, जहां आपको महीने की सप्ताह में 6 या सप्ताह के साथ 53 की रेंज के साथ सप्ताह की सप्ताह मिल जाएगी।

0

मैं डेटबैडिंग यूनिट का उपयोग करना पसंद करता हूं। यह अधिक सहज ज्ञान युक्त

return [NSDate[[NSCalendar currentCalendar] dateByAddingUnit:NSCalendarUnitMonth value:3 toDate:toDate options:0]; 
संबंधित मुद्दे