2011-10-12 11 views
10

है मेरे पास NSDate के बारे में एक प्रश्न है। मेरे पास एक तिथि है i.e. "2011-10-04 07:36:38 +0000", और मैं यह जांचना चाहता हूं कि यह तिथि कल है, या आज या भविष्य की तारीख है।जांचें कि क्या एक निर्दिष्ट तिथि आज, कल, या भविष्य की तारीख

मैं इसके बारे में कैसे जाऊं?

उत्तर

42

इस प्रयास करें:

नोट: अपने जरूरत के अनुसार दिनांक स्वरूप बदलें।

NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MM/dd/yyyy"]; 
NSDate* enteredDate = [df dateFromString:@"10/04/2011"]; 
NSDate * today = [NSDate date]; 
NSComparisonResult result = [today compare:enteredDate]; 
switch (result) 
{ 
    case NSOrderedAscending: 
     NSLog(@"Future Date"); 
        break; 
    case NSOrderedDescending: 
     NSLog(@"Earlier Date"); 
        break; 
    case NSOrderedSame: 
     NSLog(@"Today/Null Date Passed"); //Not sure why This is case when null/wrong date is passed 
        break; 
} 
+5

प्रत्येक केस स्टेटमेंट के बाद ब्रेक होना चाहिए ताकि अन्य मामलों में प्रवेश न किया जा सके। –

+0

ध्यान दें कि यह कभी भी "आज" वापस नहीं आएगा - एनएसडीएटी समय में एक विशिष्ट तत्काल का प्रतिनिधित्व करता है, इसलिए 'NSOrderedSame' (अनिवार्य रूप से) कभी नहीं होगा – Tim

2

से किसी का उपयोग उर आवश्यकता के अनुसार folowing,

– earlierDate: 
– laterDate: 
– compare: 

देखें इस http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

+1

यह आईओएस विकास के लिए उपलब्ध नहीं है। साइट से, यह स्पष्ट रूप से ऐसा कहता है: "उपलब्धता \t ओएस एक्स v10.0 और बाद में उपलब्ध है।" – JHHoang

7

देखें Apple's documentation on date calculations:

NSDate *startDate = ...; 
NSDate *endDate = ...; 

NSCalendar *gregorian = [[NSCalendar alloc] 
       initWithCalendarIdentifier:NSGregorianCalendar]; 

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; 

NSDateComponents *components = [gregorian components:unitFlags 
              fromDate:startDate 
              toDate:endDate options:0]; 
NSInteger months = [components month]; 
NSInteger days = [components day]; 

तो days +1 और -1 तो अपनी तिथि के बीच है "आज" होने के लिए उम्मीदवार है। जाहिर है आपको इस बारे में सोचना होगा कि आप घंटों को कैसे संभालेंगे। संभावित रूप से सबसे आसान बात यह है कि सभी तिथियों को दिन में 00: 00.00 घंटे (truncate the date using an approach like this) पर सेट करना होगा, और फिर गणना के लिए उन मानों का उपयोग करें। इस तरह आप आज के लिए 0 प्राप्त करेंगे, -1 कल के लिए, कल के लिए +1, और कोई अन्य मूल्य भी आपको बताएगा कि भविष्य में या अतीत में कितनी चीजें थीं।

+0

यह काम करेगा, लेकिन डेलाइट बचत समय परिवर्तनों के आसपास त्रुटियों से बचने के लिए, दोपहर के समय (12:00:00) सेट करना अधिक सुरक्षित है। – Suz

+0

विडंबना यह है कि, मैंने मूल रूप से दोपहर के लिए घंटों की स्थापना करने का सुझाव दिया, लेकिन छेड़छाड़ करने का उदाहरण मध्यरात्रि में स्थापित हो गया था और मुझे लगा कि यह भी सुसंगत रहेगा! हालांकि, यदि दोनों तिथियां एक ही समय क्षेत्र में हैं, तो इससे कोई फर्क नहीं पड़ता है, क्योंकि डेलाइट बचत परिवर्तन 2 बजे होता है, घड़ियों को 1 बजे वापस सेट करता है, इसलिए सभी मामलों में एक ही टाइमज़ोन की दो तिथियां उसी कैलेंडर तिथियों तक कम हो जाएंगी , डेलाइट बचत के बावजूद। –

+0

यदि आप वास्तव में खाता समय क्षेत्र में लेना चाहते हैं, तो सबसे अच्छा तरीका दोनों तिथियों को कुछ और करने से पहले एक ही समय क्षेत्र में बदलना होगा। –

1
-(NSString*)timeAgoFor:(NSString*)tipping_date 
{ 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *date = [dateFormatter dateFromString:tipping_date]; 
    NSString *key = @""; 
    NSTimeInterval ti = [date timeIntervalSinceDate:[NSDate date]]; 
    key = (ti > 0) ? @"Left" : @"Ago"; 

    ti = ABS(ti); 
    NSDate * today = [NSDate date]; 
    NSComparisonResult result = [today compare:date]; 

    if (result == NSOrderedSame) { 
     return[NSString stringWithFormat:@"Today"]; 
    } 
    else if (ti < 86400 * 2) { 
     return[NSString stringWithFormat:@"1 Day %@",key]; 
    }else if (ti < 86400 * 7) { 
     int diff = round(ti/60/60/24); 
     return[NSString stringWithFormat:@"%d Days %@", diff,key]; 
    }else { 
     int diff = round(ti/(86400 * 7)); 
     return[NSString stringWithFormat:@"%d Wks %@", diff,key]; 
    } 
} 
+0

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

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