Intereting Posts
sizeToFit अजीब तरह से काम कर रहा है आईओएस के लिए Instagram ढांचा एसिंक्रोनस को निष्पादित करने वाले ब्लॉक पर प्रतीक्षा करने के लिए आईओएस (या रूबी मोशन) मुहावरे क्या है? कभी-कभी NSDate में एक घंटे का अंतर हो रहा है मैसेजिंग ऐप के लिए parse.com पर संदेश इतिहास को संग्रहीत करना? एक स्टोरीबोर्ड व्यू को प्रोग्रामेटिक रूप से तैयार किए गए दृश्य के एक सबव्यू के रूप में जोड़ें NSDate और NSDateComponents गलत तारीख वापस आती है Xcode 4.6 में "पो" कमांड पहली बार बहुत धीमा है आईओएस: कोर डेटा के साथ पृष्ठभूमि में ऑटो-सिंक UIView के साथ एकता 3 डी एकीकरण लॉगिन बिना वेब सेवा को सुरक्षित कैसे करें gstreamer ios अपरिभाषित प्रतीक _gst_plugin_liveadder_register स्विफ्ट – कस्टम एमके एनोटेशन दृश्य, सेट लेबल शीर्षक दस्तावेज़ निर्देशिका से वीडियो को हटाने में समस्याएं आईओएस डिवाइस पर 3 जी / वाईफ़ाई पर नेटवर्क ट्रैफ़िक का नज़र कैसे रखना है?

आईओएस: समय के बिना दो एनएसडीट-एस की तुलना करें

मैं दो तिथियों की तुलना करना चाहता हूं: तारीख 1 और तिथि 2

2011-06-06 12:59:48.994 Project[419:707] firstDate:2011-06-06 10:59:21 +0000 2011-06-06 12:59:49.004 Project[419:707] selectedData:2011-06-06 10:59:17 +0000 

लेकिन ये तिथियां अलग-अलग समय हैं और जब मैं एनएसओर्डडेड का उपयोग करता हूं तो यह ठीक काम नहीं कर रहा है, मैं कैसे हल कर सकता हूं?

मेरा कोड:

 NSDate *firstDate = [[appDelegate.project objectAtIndex:i]objectAtIndex:3]; NSDate *secondDate = [[appDelegate.project objectAtIndex:i]objectAtIndex:4]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSInteger comps = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit); NSDateComponents *date1Components = [calendar components:comps fromDate:firstDate]; NSDateComponents *date2Components = [calendar components:comps fromDate:secondDate]; NSDateComponents *date3Components = [calendar components:comps fromDate:appDelegate.selectedDate]; NSLog(@"firstDate:%@", [date1Components date]); NSLog(@"secondDate:%@", [date2Components date]); NSLog(@"selectedData:%@", [date3Components date]); NSComparisonResult compareStart = [[date1Components date] compare: [date3Components date]]; NSComparisonResult compareEnd = [[date2Components date] compare: [date3Components date]]; if ((compareStart == NSOrderedAscending || compareStart == NSOrderedSame) && (compareEnd == NSOrderedDescending || compareEnd == NSOrderedSame)) { NSLog(@"inside"); 

फिर मैं अपनी तिथियाँ और प्रविष्टि "if" के अंदर तुलना करना चाहता हूं जब दिनांक 1 <= चयनित दिनांक <= तारीख 2; अब मुझे समझ में आ रहा है क्योंकि मेरे पास एक चेतावनी है: मुझे इसे "[date1Components date]" जोड़ना चाहिए और यह काम करेगा; समस्या यह है कि मेरे पास NSLog शून्य मूल्यों में है, क्यों ??

Solutions Collecting From Web of "आईओएस: समय के बिना दो एनएसडीट-एस की तुलना करें"

 NSCalendar *calendar = [NSCalendar currentCalendar]; NSInteger comps = (NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear); NSDateComponents *date1Components = [calendar components:comps fromDate: date1]; NSDateComponents *date2Components = [calendar components:comps fromDate: date2]; date1 = [calendar dateFromComponents:date1Components]; date2 = [calendar dateFromComponents:date2Components]; NSComparisonResult result = [date1 compare:date2]; if (result == NSOrderedAscending) { } else if (result == NSOrderedDescending) { } else { //the same } 

किसी दिए गए तिथि के लिए बनाने की एक और आसान तरीका है, जो एक इकाई की शुरुआत का प्रतिनिधित्व करता है: [aCalendar rangeOfUnit:startDate:interval:forDate:]
यह विधि कैसे काम करती है, यह समझने के लिए, यह कोड देखें, जो किसी निश्चित तिथि (यहां: अब) के लिए आसानी से दिन, सप्ताह, महीना और वर्ष की शुरुआत के लिए दिनांक बनाता है।

 NSDate *now = [NSDate date]; NSDate *startOfToday = nil; NSDate *startOfThisWeek = nil; NSDate *startOfThisMonth = nil; NSDate *startOfThisYear = nil; [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&startOfToday interval:NULL forDate:now]; [[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit startDate:&startOfThisWeek interval:NULL forDate:now]; [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&startOfThisMonth interval:NULL forDate:now]; [[NSCalendar currentCalendar] rangeOfUnit:NSYearCalendarUnit startDate:&startOfThisYear interval:NULL forDate:now]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterFullStyle]; [formatter setTimeStyle:NSDateFormatterFullStyle]; NSLog(@"%@", [formatter stringFromDate:now]); NSLog(@"%@", [formatter stringFromDate:startOfToday]); NSLog(@"%@", [formatter stringFromDate:startOfThisWeek]); NSLog(@"%@", [formatter stringFromDate:startOfThisMonth]); NSLog(@"%@", [formatter stringFromDate:startOfThisYear]); 

परिणाम:

 Thursday, July 12, 2012, 4:36:07 PM Central European Summer Time Thursday, July 12, 2012, 12:00:00 AM Central European Summer Time Sunday, July 8, 2012, 12:00:00 AM Central European Summer Time Sunday, July 1, 2012, 12:00:00 AM Central European Summer Time Sunday, January 1, 2012, 12:00:00 AM Central European Standard Time 

इससे हमें पहले कोड को छोटा करने की अनुमति मिलती है:

 [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&date1 interval:NULL forDate:date1]; [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&date2 interval:NULL forDate:date2]; NSComparisonResult result = [date1 compare:date2]; if (result == NSOrderedAscending) { } else if (result == NSOrderedDescending) { } else { //the same } 

ध्यान दें, इस कोड में, date2 और date2 को ओवरराइट किया जाएगा। वैकल्पिक रूप से आप ऊपर दिए गए कोड में दिखाए गए अनुसार स्टार्टडेट के लिए किसी अन्य एनएसडीट पॉइंटर के संदर्भ में पास कर सकते हैं, जहां now अछूता रहता है।

मैंने NSDateFormatter और एक स्ट्रिंग तुलना के साथ एक और विधि का उपयोग किया है, NSDate की तुलना में कम चालाक विधि की तुलना करते हैं, लेकिन लिखने के लिए तेज़ और तुलनात्मक रूप से तुलना करने के लिए पर्याप्त रूप से लचीले हैं:

 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd"]; if ([[dateFormat stringFromDate:date1] isEqualToString:[dateFormat stringFromDate:date2]]) { //It's the same day } 

स्विफ्ट संस्करण , तिथियों की तुलना करना और उनके समय की अनदेखी करना।

 let dateExam1:NSDate = NSDate.init(timeIntervalSinceNow: 300) let dateExam2:NSDate = NSDate.init(timeIntervalSinceNow: 10000) let currCalendar = NSCalendar.currentCalendar() let dateCompanent1:NSDateComponents = currCalendar.components([.Year,.Month,.Day], fromDate: dateExam1) let dateCompanent2:NSDateComponents = currCalendar.components([.Year,.Month,.Day], fromDate: dateExam2) let date1WithoutTime:NSDate? = currCalendar .dateFromComponents(dateCompanent1) let date2WithoutTime:NSDate? = currCalendar .dateFromComponents(dateCompanent2) if (date1WithoutTime != nil) && (date2WithoutTime != nil) { let dateCompResult:NSComparisonResult = date1WithoutTime!.compare(date2WithoutTime!) if (dateCompResult == NSComparisonResult.OrderedSame) { print("Same Dates") } else { print("Different Dates") } } 

ठीक है, इसलिए मूल प्रश्न के कुछ साल बाद पूछा गया, लेकिन शायद यह उल्लेखनीय है कि NSCalendar पास कई तरह के तरीकों हैं जो निश्चित तारीख तुलनात्मक प्रश्नों को अधिक सीधे आगे बढ़ाते हैं:

 NSCalendar *currentCalendar = [NSCalendar currentCalendar]; Bool sameDay = [currentCalendar isDate:dateA inSameDayAsDate:dateB];