2013-08-09 3 views
5

के लिए एनएसडीएटी खोजें, मैं वर्तमान तिथि के बाद अगले सोमवार की तारीख प्राप्त करना चाहता हूं।अगले सोमवार

तो अगर आज की तारीख 2013-08-09 (शुक्रवार) है तो मैं दिनांक 2013-08-12 प्राप्त करना चाहता हूं।

मैं यह कैसे कर सकता हूं?

+5

हालांकि यह है याद एक साधारण सवाल और थोड़ा प्रयास करने की आवश्यकता है, किसी भी भाषा में नरक के रूप में तारीखें परेशान हैं इसलिए मुझे नहीं पता कि आपको नीचे वोट क्यों दिया जाना चाहिए। –

उत्तर

30

कोड का यह टुकड़ा आप क्या चाहते हैं मिलना चाहिए कर सकते हैं। यह बस गणना करता है कि सोमवार से कितने दिन हैं और इसे वर्तमान की तारीख से जोड़ दें।

NSDate *now = [NSDate date]; 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:now]; 

NSUInteger weekdayToday = [components weekday]; 
NSInteger daysToMonday = (9 - weekdayToday) % 7; 

NSDate *nextMonday = [now dateByAddingTimeInterval:60*60*24*daysToMonday]; 

untested है, लेकिन काम करना चाहिए, और कैलेंडर के पहले दिनांक बदलने के बारे में चिंता किए बिना।

और तो यह और भी आसानी से एक और दिन सप्ताह के हर को addapted किया जा सकता है, बस 7 + weekDayYouWant द्वारा 9(9 - weekdayToday) % 7; अंदर बदलने के लिए, कि रविवार = 1, सोमवार = 2 ...

+0

धन्यवाद लुकास, पूरी तरह से काम करता है। सिर्फ एक बात, अगर आज सोमवार है तो मैं इस सोमवार के बजाय अगले सोमवार को दिखाना चाहता हूं। क्या आप मुझे बता सकते हैं कि मैं इसे कैसे प्राप्त कर सकता हूं? धन्यवाद फिर से – iOSAppDev

+0

मुझे नहीं लगता कि इस तरह के एक दिन के लिए व्यवहार को बदलने का एक शानदार तरीका है। लेकिन आप ** ** ** ('प्रतिस्थापित नहीं) कुछ ऐसा कर सकते हैं, ** **' '' अगले 'सोमवार' 'कोड से पहले:' '' दिन ToMonday = (daysToMonday == 0)? 7: दिन टोंडोडे; '' '। इस तरह, आप वर्तमान दिन सोमवार को 0 दिनों के बजाय 7 दिन जोड़ देंगे। अगर आपको इस मामले के लिए बेहतर समाधान मिल रहा है, तो बस मुझे बताएं –

+1

त्वरित उत्तर के लिए धन्यवाद और आपका समाधान पूरी तरह से काम करता है :) धन्यवाद – iOSAppDev

5

आप NSCalendar विधि dateFromComponents: का उपयोग एक ठीक से शुरू की NSDateComponents वस्तु गुजर इन पंक्तियों के साथ

NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]]; 

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setWeekOfYear:[components weekOfYear] + 1]; 
[comps setWeekday:1]; 
[comps setYear:[components year]]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
[calendar setFirstWeekday:2]; //This needs to be checked, which day is monday? 
NSDate *date = [calendar dateFromComponents:comps]; 

कुछ काम कर सकता था (आँख बंद करके टाइप किया)

+0

मानते हैं कि सप्ताह रविवार (सप्ताह का दिन = 0) में शुरू होता है, क्या यह कोड रविवार को चलने के एक दिन के बजाय सप्ताह के सोमवार को नहीं मिलेगा? –

+3

सप्ताहांत इकाइयां संख्या 1 से एन हैं, जहां एन सप्ताह में दिनों की संख्या है। उदाहरण के लिए, ग्रेगोरियन कैलेंडर में, एन 7 है और रविवार का प्रतिनिधित्व 1. तो हां, शायद कोड को बदलने की जरूरत है – Vik

+1

मैंने इसे थोड़ा ध्यान में रखने के लिए कोड संपादित किया। बेशक किसी को भी यह जांचना चाहिए कि वर्तमान दिन साल का आखिरी सप्ताह नहीं है और इसी तरह .. – Vik

संबंधित मुद्दे