আইওএস: দুটি তারিখের তুলনা করুন


96

আমার একটি আছে NSDateযা আমি অবশ্যই অন্য দুটি সাথে তুলনা NSDateকরব এবং আমি চেষ্টা করব NSOrderAscendingএবং NSOrderDescendingতবে আমার তারিখটি যদি অন্য দুটি তারিখে সমান হয়?

উদাহরণ: আমার যদি একটি myDate = 24/05/2011 এবং অন্য দুটি থাকে যা এক = 24/05/2011এবং দুটি 24/05/2011আমি কী ব্যবহার করতে পারি?


4
আমি আপনার প্রশ্নটি পুরোপুরি বুঝতে পারি না, আপনি কী অর্জন করার চেষ্টা করছেন?
আরকিলাইট

তারিখের এক এবং তারিখ দুটি এক = 15/05/2011 এবং দুটি = 31/05/2011 হতে পারে তবে সেগুলিও একই দিনে এক হতে হবে = 24/05/2011 এবং দুটো = 24/05/2011 তবে অবশ্যই আমার চেক করা উচিত কিনা মায়াডাটা তারিখের এক এবং দ্বিতীয় তারিখের
বীট-এর মধ্যে রয়েছে

কেবল বছর, মাস এবং তারিখটি নিষ্ক্রিয় করুন এবং সেই ক্রমে তাদের তুলনা করুন। যদি টাই থাকে তবে পরবর্তী ক্ষেত্রের সাথে তুলনা করুন।
হিমাদ্রি চৌধুরী

উত্তর:


210

মতে অ্যাপল ডকুমেন্টেশনNSDate compare:

একটি NSCompistanceResult মান প্রদান করে যা রিসিভারের সাময়িক ক্রম এবং অন্য প্রদত্ত তারিখকে নির্দেশ করে।

- (NSComparisonResult)compare:(NSDate *)anotherDate

পরামিতি anotherDate

প্রাপকের সাথে তুলনা করার তারিখ। এই মানটি শূন্য করা উচিত নয়। মানটি যদি শূন্য থাকে তবে আচরণটি অপরিবর্তিত রয়েছে এবং ম্যাক ওএস এক্সের ভবিষ্যতের সংস্করণগুলিতে পরিবর্তিত হতে পারে

ফেরত মূল্য

যদি:

রিসিভার এবং অন্য তারিখ একে অপরের সমান সমান, NSOrderedSame

গ্রহীতা সময় পরে অন্য তারিখের চেয়ে বেশি হয়, NSOrderedDescending

গ্রহীতা অন্য সময়সীমার চেয়ে আগে সময়ে ছিল, NSOrderedAscending

অন্য কথায়:

if ([date1 compare:date2] == NSOrderedSame) ...

মনে রাখবেন যে এটি পড়তে এবং লিখতে আপনার বিশেষ ক্ষেত্রে এটি আরও সহজ হতে পারে:

if ([date2 isEqualToDate:date2]) ...

এটি সম্পর্কে অ্যাপল ডকুমেন্টেশন দেখুন ।


তবে চ ([তারিখ 1 তুলনা: তারিখ 2] == এনএসঅর্ডার্ডসাম) ঘন্টা ঘন্টা এবং সেকেন্ডও পরীক্ষা করে দেখুন এবং আমি এটি চাই না
সাইক্লিংআইস বেটার

4
আপনার প্রশ্নটি কিছুটা অস্পষ্ট ছিল, দুঃখিত, স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 1889164 / 3092009 # 3092009 দেখুন , আপনি এর উত্তর খুঁজে পাবেন।
ভিনসেন্ট গেরসি 24'11

এই উত্তর দুটিভাবেই সঠিক is আপনি যে তারিখের উপাদানগুলি ব্যবহারের সাথে তুলনা করছেন তা নিয়ন্ত্রণ করতেNSDateComponents
নাজির

32

স্ট্যাকওভারফ্লো এবং ওয়েবে প্রচুর অনুসন্ধানের পরে, আমি সিদ্ধান্তে পৌঁছেছি যে এটি করার সর্বোত্তম উপায়টি এটি:

- (BOOL)isEndDateIsSmallerThanCurrent:(NSDate *)checkEndDate
{
    NSDate* enddate = checkEndDate;
    NSDate* currentdate = [NSDate date];
    NSTimeInterval distanceBetweenDates = [enddate timeIntervalSinceDate:currentdate];
    double secondsInMinute = 60;
    NSInteger secondsBetweenDates = distanceBetweenDates / secondsInMinute;

    if (secondsBetweenDates == 0)
        return YES;
    else if (secondsBetweenDates < 0)
        return YES;
    else
        return NO;
}

আপনি এটিকে কয়েক ঘন্টার ব্যবধানেও পরিবর্তন করতে পারবেন।

উপভোগ করুন!


সম্পাদনা 1

আপনি যদি কেবল ডিডি / এমএম / ইয়াহির বিন্যাসের সাথে তারিখের তুলনা করতে চান তবে আপনাকে NSDate* currentdate = [NSDate date];&& এর মধ্যে নীচের লাইনগুলি যুক্ত করতে হবেNSTimeInterval distance

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]
                          autorelease]];

NSString *stringDate = [dateFormatter stringFromDate:[NSDate date]];

currentdate = [dateFormatter dateFromString:stringDate];

4
ধন্যবাদ এটি তুলনা বা ইক্যুয়াল টুডেটের চেয়ে আরও ভাল কাজ করে
আর্দেনদেব

রাজি। আমি তুলনা ও ইস্কুল টুডেট ব্যবহার করতে সমস্যা পেয়েছি। অবশ্যই, এটি কোডের অতিরিক্ত 2 লাইন হতে পারে তবে এটি আরও নির্ভরযোগ্য।
কোচ রোবাক

23

তুলনামূলক ফাংশনে রিটার্নের মান কী তা আপনি জিজ্ঞাসা করছেন এটি আমি গ্রহণ করি।

যদি তারিখগুলি সমান হয় তবে ফিরে আসবে NSOrderedSame

যদি আরোহণ (দ্বিতীয় তর্ক> প্রথম আরগ) ফিরে আসে NSOrderedAscending

অবতরণ হলে (২ য় তর্ক <ম প্রথম তর্ক) ফিরুন NSOrderedDescending


আরোহণ এবং উত্থানের কথা চিন্তা করার ভাল উপায়।
ডেভিড

16

আপনি এটি জিজ্ঞাসা করেছেন কিনা তা আমি ঠিক জানি না তবে আপনি যদি কেবল কোনও এনএসডেটের তারিখের উপাদানটি তুলনা করতে চান তবে আপনাকে সময় উপাদানটি অপসারণ করতে এনএসক্যালেন্ডার এবং এনএসডিটকম্পোন্ট ব্যবহার করতে হবে।

এনএসডেটের জন্য এই শ্রেণীর একটি বিষয় হিসাবে কাজ করা উচিত:

- (NSComparisonResult)compareDateOnly:(NSDate *)otherDate {
    NSUInteger dateFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit;
    NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDateComponents *selfComponents = [gregorianCalendar components:dateFlags fromDate:self];
    NSDate *selfDateOnly = [gregorianCalendar dateFromComponents:selfComponents];

    NSDateComponents *otherCompents = [gregorianCalendar components:dateFlags fromDate:otherDate];
    NSDate *otherDateOnly = [gregorianCalendar dateFromComponents:otherCompents];
    return [selfDateOnly compare:otherDateOnly];
}

2

NSDateএকটি রেফারেন্স তারিখ (1 জানুয়ারী 2000 ইউটিসি আমার মনে হয়) থেকে প্রকৃতপক্ষে সেকেন্ডে একটি সময়ের ব্যবধান উপস্থাপন করে। অভ্যন্তরীণভাবে, একটি ডাবল নির্ভুলতা ভাসমান পয়েন্ট সংখ্যা ব্যবহৃত হয় যাতে দুটি স্বেচ্ছাচারিত তারিখ একই দিনে থাকলেও সমান তুলনা করার সম্ভাবনা খুব বেশি। যদি আপনি দেখতে চান যে কোনও নির্দিষ্ট তারিখে কোনও নির্দিষ্ট দিন পড়ে যায় তবে আপনার সম্ভবত ব্যবহারের প্রয়োজন NSDateComponents। যেমন

NSDateComponents* dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear: 2011];
[dateComponents setMonth: 5];
[dateComponents setDay: 24];
/*
 *  Construct two dates that bracket the day you are checking.  
 *  Use the user's current calendar.  I think this takes care of things like daylight saving time.
 */
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* startOfDate = [calendar dateFromComponents: dateComponents];
NSDateComponents* oneDay = [[NSDateComponents alloc] init];
[oneDay setDay: 1];
NSDate* endOfDate = [calendar dateByAddingComponents: oneDay toDate: startOfDate options: 0];
/*
 *  Compare the date with the start of the day and the end of the day.
 */
NSComparisonResult startCompare = [startOfDate compare: myDate];
NSComparisonResult endCompare = [endOfDate compare: myDate];

if (startCompare != NSOrderedDescending && endCompare == NSOrderedDescending)
{
    // we are on the right date
} 

2

প্রথমে দুটি এনএসডিট অবজেক্ট তৈরি করুন এবং ফাংশনে পাস করুন: তারিখের তুলনার জন্য নিম্নলিখিত ফাংশনটি পরীক্ষা করে দেখুন: ভিডোডিলোডে কোডের বেলো লাইনগুলি যুক্ত করুন বা আপনার পরিস্থিতি অনুসারে।

-(void)testDateComaparFunc{

NSString *getTokon_Time1 = @"2016-05-31 03:19:05 +0000";
NSString *getTokon_Time2 = @"2016-05-31 03:18:05 +0000";
NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
NSDate *tokonExpireDate1=[dateFormatter dateFromString:getTokon_Time1];
NSDate *tokonExpireDate2=[dateFormatter dateFromString:getTokon_Time2];
BOOL isTokonValid = [self dateComparision:tokonExpireDate1 andDate2:tokonExpireDate2];}

এখানে ফাংশন

-(BOOL)dateComparision:(NSDate*)date1 andDate2:(NSDate*)date2{

BOOL isTokonValid;

if ([date1 compare:date2] == NSOrderedDescending) {
    //"date1 is later than date2
    isTokonValid = YES;
} else if ([date1 compare:date2] == NSOrderedAscending) {
    //date1 is earlier than date2
    isTokonValid = NO;
} else {
   //dates are the same
    isTokonValid = NO;

}

return isTokonValid;}

কেবল তারিখ পরিবর্তন করুন এবং উপরের ফাংশনটি পরীক্ষা করুন :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.