আইওএসে দুটি তারিখের মধ্যে কীভাবে ঘন্টা সময় গণনা করতে হয়


103

আমি কীভাবে আইওএসে দু'বার (সম্ভবত বিভিন্ন দিনে ঘটতে পারে) এর মধ্যে কয়েক ঘণ্টার মধ্যে সময় অতিবাহিত করতে পারি?


1
আরেকটি বিকল্প হ'ল NSCalendarএর -components:fromDate:toDate:options:পদ্ধতি ব্যবহার করা ।
থমাস মুলার

আমি বিশ্বাস করি না যে এটি আপনাকে নিখুঁত ঘন্টা দেবে। এটি কেবল আপনাকে 0-24 এর থেকে একটি মান দেয় যেখানে পুরো সময়ের ব্যবধান পেতে আপনাকে দিন, মাস এবং বছর উপাদানগুলির উপর নির্ভর করতে হয়।
কোডেপারসন

আমি এটি পরীক্ষা করেছি এবং এটি ঠিক কাজ করে। তারিখ 1 / জানুয়ার / 2012 থেকে এবং 4 / জানুয়ার / 2012 তারিখে এইটি 96 ঘন্টা ফিরে এসেছে।
টমাস মুলার

আপনার কোড থমাস পোস্ট করবেন? এটি কিছু জন্য কাজ করে না।
জন রিসেলভাতো

উত্তর:


171

NSDate ফাংশন timeIntervalSinceDate: আপনি সেকেন্ডের মধ্যে দুটি তারিখের পার্থক্য দিতে হবে।

 NSDate* date1 = someDate;
 NSDate* date2 = someOtherDate;
 NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];
 double secondsInAnHour = 3600;
 NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnHour;

দেখুন, আপেল রেফারেন্স লাইব্রেরি http://developer.apple.com/library/mac/navication/ বা আপনি যদি Xcode ব্যবহার করছেন তবে মেনু থেকে কেবল সহায়তা / ডকুমেন্টেশন নির্বাচন করুন ।

দেখুন: কীভাবে রূপান্তর-এ-এনএসটাইমেন্টারওয়াল-সেকেন্ড-মিনিটে

- সম্পাদনা: দিবালোক সঞ্চয় / লিপ সেকেন্ড সঠিকভাবে পরিচালনা করার জন্য নীচে অর্ভিলের উত্তর দেখুন


2
এবং যদি ডেটলাইট সঞ্চয়গুলির জন্য তারিখগুলি / সময়গুলি ক্রান্তিকাল অতিক্রম করে তবে কী ঘটে?
অ্যাবিজার্ন

2
@ অ্যাবিজার্ন: ধন্যবাদ, আমি যখন প্রশ্নের উত্তর দিয়েছিলাম তখন আমি এই মামলাগুলি বিবেচনা করছিলাম না। আমি উত্তরের সাথে আরভিলের সাথে লিঙ্ক করেছি
আকুসেটে

আমার সময় স্লট আছে যেমন 4:50:30, h: এম: সিকে এবার বিয়োগ করতে হবে 12:30:20 থেকে আমি কীভাবে এটি করব
আইআজ

90
NSCalendar *c = [NSCalendar currentCalendar];
NSDate *d1 = [NSDate date];
NSDate *d2 = [NSDate dateWithTimeIntervalSince1970:1340323201];//2012-06-22
NSDateComponents *components = [c components:NSHourCalendarUnit fromDate:d2 toDate:d1 options:0];
NSInteger diff = components.minute;

NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit

প্রতিদিন, ঘন্টা বা মিনিটে প্রয়োজনীয় উপাদানগুলি পরিবর্তন করুন, আপনি যে পার্থক্যটি চান। যদি NSDayCalendarUnitএটি নির্বাচিত হয় তবে এটি একই সাথে NSHourCalendarUnitএবং দুটি তারিখের মধ্যে দিনের সংখ্যা ফিরে আসবেNSMinuteCalendarUnit

সুইফট 4 সংস্করণ

let cal = Calendar.current
let d1 = Date()
let d2 = Date.init(timeIntervalSince1970: 1524787200) // April 27, 2018 12:00:00 AM
let components = cal.dateComponents([.hour], from: d2, to: d1)
let diff = components.hour!

কি মান তারিখউথটাইমIntervalSince1970 গ্রহণ? আমি বিশ্বাস করি আপনি 2012-06-22 তারিখটি 1340323201 এ রূপান্তর করেছেন please দয়া করে আমাকে সংশোধন করুন।
জিত

আমার জন্য কাজ করছে না। 9223372036854775807 হিসাবে পৃথক মান পেয়েছে it এটি কি মিলিসেকেন্ডে?
কীর্তী নিকম

সুইফট 4.2। [। ঘন্টা] এর পরিবর্তে আপনি সেট <ক্যালেন্ডার.কম্পোনেন্ট> ([ঘন্টা ঘন্টা]) ব্যবহার করতে পারেন
ইভানপাবলিক

19
-(NSMutableString*) timeLeftSinceDate: (NSDate *) dateT {

    NSMutableString *timeLeft = [[NSMutableString alloc]init];

    NSDate *today10am =[NSDate date];

    NSInteger seconds = [today10am timeIntervalSinceDate:dateT];

    NSInteger days = (int) (floor(seconds / (3600 * 24)));
    if(days) seconds -= days * 3600 * 24;

    NSInteger hours = (int) (floor(seconds / 3600));
    if(hours) seconds -= hours * 3600;

    NSInteger minutes = (int) (floor(seconds / 60));
    if(minutes) seconds -= minutes * 60;

    if(days) {
        [timeLeft appendString:[NSString stringWithFormat:@"%ld Days", (long)days*-1]];
    }

    if(hours) {
        [timeLeft appendString:[NSString stringWithFormat: @"%ld H", (long)hours*-1]];
    }

    if(minutes) {
        [timeLeft appendString: [NSString stringWithFormat: @"%ld M",(long)minutes*-1]];
    }

    if(seconds) {
        [timeLeft appendString:[NSString stringWithFormat: @"%lds", (long)seconds*-1]];
    }

    return timeLeft;
}

9
না, এটি করবেন না। সমস্ত ঘন্টা 3600 সেকেন্ড হয় না। সমস্ত দিন 24 ঘন্টা হয় না।
rmaddy

5
এটা সম্পূর্ণ ভুল। লিপ সেকেন্ড, দিনের আলোর সময় সাশ্রয়ের জন্য অ্যাকাউন্ট করে না। দয়া করে হুইলটিকে পুনরায় উদ্ভাবন করবেন না কেবল এনএসডিটকম্পোন্টগুলির মতো আইওএসের সাথে সরবরাহিত এপিআইগুলি ব্যবহার করুন।
জুয়ান কাতালান

5

চেকআউট: এটি গণমাধ্যমে আইওএস ক্যালেন্ডার ব্যবহার করে দিবালোকের সংরক্ষণ, লিপ ইয়ারের যত্ন নেয়। আপনি স্ট্রিং এবং শর্তগুলি পরিবর্তন করতে পারেন যাতে কয়েক ঘন্টা এবং দিন সহ মিনিট অন্তর্ভুক্ত থাকে।

+(NSString*)remaningTime:(NSDate*)startDate endDate:(NSDate*)endDate {

    NSDateComponents *components;
    NSInteger days;
    NSInteger hour;
    NSInteger minutes;
    NSString *durationString;

    components = [[NSCalendar currentCalendar] components: NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute
                                                 fromDate: startDate toDate: endDate options: 0];
    days = [components day];
    hour = [components hour];
    minutes = [components minute];

    if (days > 0) {

        if (days > 1) {
            durationString = [NSString stringWithFormat:@"%d days", days];
        }
        else {
            durationString = [NSString stringWithFormat:@"%d day", days];
        }
        return durationString;
    }

    if (hour > 0) {

        if (hour > 1) {
            durationString = [NSString stringWithFormat:@"%d hours", hour];
        }
        else {
            durationString = [NSString stringWithFormat:@"%d hour", hour];
        }
        return durationString;
    }

    if (minutes > 0) {

        if (minutes > 1) {
            durationString = [NSString stringWithFormat:@"%d minutes", minutes];
        }
        else {
            durationString = [NSString stringWithFormat:@"%d minute", minutes];
        }
        return durationString;
    }

    return @"";
}

এটি 12 ঘন্টারও বেশি পার্থক্য দেখাচ্ছে না। যদি আমি 23 ঘন্টা কিছু শর্ত পরীক্ষা করতে চাই, তবে সময়ের মধ্যে 23 ঘন্টার পার্থক্য কীভাবে পাব?
Moxarth

এটি ভুল সময়ের ব্যবধান দিচ্ছে, আমার পক্ষে কাজ করছে না।
অরবিন্দ প্যাটেল

3

যারা 3 ও ততোধিক সুইফ্ট ব্যবহার করেন,

    let dateString1 = "2018-03-15T14:20:00.000Z"
    let dateString2 = "2018-03-20T14:20:00.000Z"

    let Dateformatter = DateFormatter()
    Dateformatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

    let date1 = Dateformatter.date(from: dateString1)
    let date2 = Dateformatter.date(from: dateString2)

    let distanceBetweenDates: TimeInterval? = date2?.timeIntervalSince(date1!)
    let secondsInAnHour: Double = 3600
    let secondsInDays: Double = 86400
    let secondsInWeek: Double = 604800

    let hoursBetweenDates = Int((distanceBetweenDates! / secondsInAnHour))
    let daysBetweenDates = Int((distanceBetweenDates! / secondsInDays))
    let weekBetweenDates = Int((distanceBetweenDates! / secondsInWeek))

    print(weekBetweenDates,"weeks")//0 weeks
    print(daysBetweenDates,"days")//5 days
    print(hoursBetweenDates,"hours")//120 hours
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.