2011-06-05 14 views
5

मेरे पास उन कार्यों का सबसे सरल है जो मैं नहीं समझ सकता कि सही तरीके से कैसे किया जाए। नीचे स्निपेट के साथ मैं एक महीने की शुरुआत कर सकता हूं।एक महीने के अंत की गणना, या इसके अंतिम दूसरे

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDate *beginning = nil; 
[cal rangeOfUnit:NSMonthCalendarUnit startDate:&beginning interval:NULL forDate:self]; 
return beginning; 

अब मुझे लगता है कि उसी महीने के अंत निर्धारित करने के लिए (23:59:59 पर अंतिम क्षण मेरी प्रयोजनों के अनुरूप होता है) चाहते हैं। मेरा पहला विचार अगले महीने के पहले दिन शुरू करना था और एक सेकंड घटा देना था। लेकिन मैं एनएसडीएट कॉम्पोनेंट इंस्टेंस में [dateComponents setMonth:[dateComponents month] + 1] पर तारीख को तोड़ नहीं सका, क्योंकि दिसम्बर के मामले में यह तरीका जनवरी तक पहुंचने के लिए 12 + 1 = 13 स्वीकार नहीं करेगा, है ना?

फिर मैं एक महीने के आखिरी दूसरे भाग कैसे प्राप्त करूं?

+0

लेकिन क्या आप वाकई आखिरी दूसरे _is_ महीने के अंत में हैं? एक के बारे में क्या - लेकिन अंतिम _millisecond_? – xtofl

+0

यह भी बिल्कुल ठीक होगा। कोई विचार? – epologee

उत्तर

3

क्या यह अगले महीने की शुरुआत पाने के लिए:

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setMonth:1]; 
NSDate *beginningOfNextMonth = [cal dateByAddingComponents:comps toDate:beginning options:0]; 
[comps release]; 
+0

यह भी बेहतर है। मैं डेट घटकों के कई प्रयोगों में धीरे-धीरे आसान हूं, धन्यवाद! – epologee

+1

वास्तव में अंतिम सेकंड प्राप्त करने के लिए, ऊपर दिए गए '[comps setSecond: -1]; 'जोड़ें। – spacehunt

+0

समझ गया, एक आकर्षण की तरह काम करता है। एक बार फिर धन्यवाद! – epologee

0

महीने के अंतिम दूसरी ... समय, कि अगले महीने के पहले दूसरे लेने, और एक दूसरे को घटाकर करने पर निर्भर करता से अधिकांश।

लेकिन क्या आप सही सवाल पूछ रहे हैं? आखिरी दूसरे का क्या अर्थ है? मेरा अनुमान है कि आप महीने के पहले दूसरे भाग (और सहित) से शुरू होने वाला समय अंतराल व्यक्त करना चाहते हैं, और एन + 1 के पहले दूसरे महीने के ठीक पहले समाप्त करना चाहते हैं।

+0

ठीक है, rephrase: मैं अगले महीने की शुरुआत कैसे प्राप्त करूं? – epologee

+2

एनएससीएंडेंडर की 'तिथि का उपयोग करेंबैडिंग कॉम्पोनेंट्स: टूडेट: विकल्प:' दिनांक गणना करने के लिए। – spacehunt

3

ठीक है, मुझे लगता है कि मेरे पास है। मैं दिनों में वर्तमान माह की लंबाई निर्धारित करने के लिए rangeOfUnit:inUnit:forDate: विधि का उपयोग कर रहा हूं, और महीने की आरंभ तिथि के लिए संबंधित एनएसटीइम इंटरवल को जोड़ता हूं।

- (NSDate *)firstSecondOfTheMonth { 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDate *beginning = nil; 
    if ([cal rangeOfUnit:NSMonthCalendarUnit startDate:&beginning interval:NULL forDate:self]) 
     return beginning; 
    return nil; 
} 

- (NSDate *)lastSecondOfTheMonth { 
    NSDate *date = [self firstSecondOfTheMonth]; 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSRange month = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:date]; 
    return [date dateByAddingTimeInterval:month.length * 24 * 60 * 60 - 1]; 
} 

नोट: हालांकि इस कोड काम करता है के रूप में मैं काम करने के लिए यह इरादा, the answer that @spacehunt अधिक स्पष्ट रूप से उद्देश्य संचार दे दी है।

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