IOS में दो तिथियों के बीच घंटों में समय की गणना कैसे करें


103

मैं iOS में दो समय (संभवतः अलग-अलग दिनों में) के बीच घंटों में बीतने वाले समय की गणना कैसे कर सकता हूं?


1
एक अन्य विकल्प का उपयोग करने के लिए है NSCalendarकी -components:fromDate:toDate:options:विधि।
थॉमस मुलर

मुझे विश्वास नहीं है कि यह आपको एक पूर्ण संख्या देगा। यह आपको केवल 0-24 से एक मूल्य देगा, जहां आपको पूर्णकालिक अंतराल प्राप्त करने के लिए घटकों के दिन, महीने और वर्ष पर निर्भर रहना होगा।
23

मैंने यह परीक्षण किया है, और यह ठीक काम करता है। 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/navigation/ या यदि आप Xcode का उपयोग कर रहे हैं तो मेनू से सहायता / प्रलेखन का चयन करें ।

देखें: कैसे-रूपांतरित-ए-नेस्टीमेन्थेवल-सेकंड-में-मिनट

--edit: डेलाइट सेविंग / लीप सेकंड को सही ढंग से संभालने के लिए ilr correctlyvil का उत्तर नीचे देखें


2
और क्या होता है यदि दिनांक / समय डेलाइट सेविंग के लिए संक्रमण को पार करते हैं?
अबजर्न

2
@ प्रश्न: धन्यवाद, मैं उन मामलों पर विचार नहीं कर रहा था जब मैंने प्रश्न का उत्तर दिया था। मैं therέÐέvil
Akusete

मेरे पास टाइम स्लॉट है जैसे ४:५०:३०, h: m: si को इस बार १२:३०:२० से घटाना है कि मैं यह कैसे करूँगा
AyAz

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!

क्या मान dateWithTimeIntervalSince1970 स्वीकार करते हैं? मेरा मानना ​​है कि आपने 2012-06-22 की तारीख को 1340323201 में बदल दिया है। कृपया मुझे सुधारें।
जीत

मेरे लिए काम नहीं कर रहा है। 9223372036854775807 के रूप में अलग-अलग मूल्य मिला। क्या यह मिलीसेकंड में है?
कीर्ति निकम

स्विफ्ट 4.2। [.Hour] के बजाय आप सेट <Calendar.Component> ([। घंटे]) का उपयोग कर सकते हैं
IvanPavliuk

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 घंटे नहीं होते हैं।
'21:39 पर तेजस्वी

5
यह पूरी तरह से गलत है। लीप सेकंड, दिन के समय की बचत के लिए खाता नहीं है। कृपया पहिया को पुनः स्थापित न करें बस NSDateComplds जैसे iOS के साथ प्रदान किए गए API का उपयोग करें।
जुआन कैटलन

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 घंटे का अंतर कैसे प्राप्त करें?
मोक्षार्थ

यह गलत समय अंतराल दे रहा है, मेरे लिए काम नहीं कर रहा है।
अरविंद पटेल

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.