আমি কীভাবে দুটি তারিখের মধ্যে পার্থক্য গণনা করতে পারি?


উত্তর:


237
NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"];

NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];

int numberOfDays = secondsBetween / 86400;

NSLog(@"There are %d days in between the two dates.", numberOfDays);

সম্পাদনা করুন:

মনে রাখবেন, NSDateঅবজেক্টগুলি সময়ের সঠিক মুহুর্তগুলিকে প্রতিনিধিত্ব করে, তাদের কোনও সময়-অঞ্চলের সম্পর্কিত কোনও তথ্য নেই। আপনি যখন উদাহরণস্বরূপ স্ট্রিংকে একটি তারিখে রূপান্তর করেন NSDateFormatter, NSDateFormatterতখন কনফিগার করা টাইমজোন থেকে সময় রূপান্তর করে। অতএব, দুটি NSDateঅবজেক্টের মধ্যে সেকেন্ডের সংখ্যা সর্বদা সময়-অঞ্চল-অজ্ঞায়িত হবে।

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


5
@ রালুকাগুরু: 86400 হ'ল একদিনে সেকেন্ডের সংখ্যা (অর্থাত্ 60 সেকেন্ড, সময় 60 মিনিট, 24 ঘন্টা)। মাসের সাথে এর তেমন কিছুই নেই।
ড্রিমলাক্স

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

2
@muthukumar: কোনো iOS এ, পদ্ধতি ম্যাক OS X এ উপলব্ধ এই প্রশ্নের বাঁধা হয় cocoaএবং cocoa-touchতাই এই উত্তর শুধুমাত্র ম্যাক OS X এর জন্য প্রযোজ্য
dreamlax

1
সময়ের যে কোনও দুটি মুহুর্তের মধ্যে দিনের সংখ্যা সর্বদা 86400 হবে humans মানুষ স্বাভাবিকের চেয়ে এক ঘন্টা আগে জেগে নিজেকে বোকা বানাতে চলেছে বা না সেদিন কোনও দিনই 86400 সেকেন্ড লম্বা হওয়া (লিপকে উপেক্ষা করে) কোন পার্থক্য নেই সেকেন্ড)
ড্রিমলাক্স

1
কেবল এটি যুক্ত করতে চান যে আপনার যদি শেষে +0000 না থাকে তবে আপনি নাল খেজুর এবং 0 এর মান সর্বদা ভিন্ন হয়ে যাবেন, তা যাই হোক না কেন। সুতরাং, যে ফাঁদে পড়ে না।
ভলমাইক

84

আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

NSDateComponents *components;
NSInteger days;

components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit 
        fromDate: startDate toDate: endDate options: 0];
days = [components day];

আমি বিশ্বাস করি যে পদ্ধতিটি দিবালোকের সঞ্চয়ের পরিবর্তনের তারিখগুলির মতো পরিস্থিতিতে পড়ে।


2
প্রদত্ত তারিখগুলির সময়টিকে উপেক্ষা করার কোনও সহজ উপায় আছে কি?
মিহাই তিমার

সেই অনুসারে অন্যান্য ক্যালেন্ডার ইউনিটগুলির জন্য পরিবর্তন করা যেতে পারে :) বছরের এককের জন্য ব্যবহৃত।
প্রযুক্তি জ্ঞান

NSDateবস্তুগুলি ইতিমধ্যে টাইম-জোন অজোনস্টিক। উদাহরণস্বরূপ তারিখগুলি বিশ্লেষণের সময় সময়-অঞ্চল তথ্য সরিয়ে ফেলা হয় NSDateFormatter, যাতে NSDateবস্তুগুলি যথাসময়ে সঠিক মুহুর্তগুলিকে উপস্থাপন করে। অতএব, আপনার যদি ইতিমধ্যে থাকে startDateএবং endDate, এই দুটি অবজেক্ট এক্স সেকেন্ডের পৃথক হবে। টাইম-জোনগুলির সাথে এর কোনও সম্পর্ক নেই।
ড্রিমলাক্স

@ বেঞ্জামিন: আপনি কেন তা বলছেন?
ড্রিমলাক্স

স্বপ্নদোষ, আপনার উত্তর ভুল। মসৃন এবং সাধারণ. 1 জানুয়ারী 1 জানুয়ারী মান সময় এবং এপ্রিল 1 দিনের আলোর সময়ের মধ্যে 12 দিনের মধ্যে দিন গণনা করুন, এবং আপনার সূত্র কাজ করে না। এটি একটি অলস সূত্র এবং বিকাশকারীদের এটি গণনা করার জন্য এনএসডিটকম্পোন্টস উপাদানটি ব্যবহার করা উচিত।
রিকস্টার

25
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds

কোথায় date1এবং date2হয় NSDate

এছাড়াও, এর সংজ্ঞাটি নোট করুন NSTimeInterval:

typedef double NSTimeInterval;

নোট করুন যে এনএসটাইমআইন্টারওয়ালটি সত্যিই দ্বিগুণ, সুতরাং আপনি এটি অন্য যে কোনও সংখ্যার মতো ব্যবহার করতে পারেন।
কেন্ডাল হেলস্টেটার জেলনার

19

এটি দেখুন। এটি দিবালোক সংরক্ষণের যত্ন নেয়, লিপ ইয়ার হিসাবে এটি গণনা করতে আইওএস ক্যালেন্ডার ব্যবহার করে You

+(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 @""; 
}

এই পদ্ধতিটি সময়ের পার্থক্য গণনা করার সঠিক উপায়।
Moxarth

শর্ত থাকলে আপনি কেবল তাদের সাথে অন্যকে রাখতে পারেন। অন্যথায় আপনি প্রদর্শিত সময়ের একমাত্র ফর্ম্যাট পাবেন।
Moxarth

3

আপনার প্রয়োজন অনুসারে সুইফ্ট 5 এবং আইওএস 12 এর সাহায্যে, আপনি দিনের মধ্যে দুটি তারিখের মধ্যে পার্থক্য খুঁজে পেতে নিম্নলিখিত দুটি উপায়ের একটি ব্যবহার করতে পারেন।


# 1। ব্যবহার CalendarএরdateComponents(_:from:to:) পদ্ধতি

import Foundation

let calendar = Calendar.current

let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!

let dateComponents = calendar.dateComponents([Calendar.Component.day], from: startDate, to: endDate)

print(dateComponents) // prints: day: 1621 isLeapMonth: false
print(String(describing: dateComponents.day)) // prints: Optional(1621)

# 2। DateComponentsFormatterএর string(from:to:)পদ্ধতি ব্যবহার করে

import Foundation

let calendar = Calendar.current

let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [NSCalendar.Unit.day]

let elapsedTime = formatter.string(from: startDate, to: endDate)
print(String(describing: elapsedTime)) // prints: Optional("1,621 days")

1

সুইফট 4
এটি ব্যবহার করে দেখুন (স্ট্রিং সহ তারিখের সীমা):

// Start & End date string
let startingAt = "01/01/2018"
let endingAt = "08/03/2018"

// Sample date formatter
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"

// start and end date object from string dates
var startDate = dateFormatter.date(from: startingAt) ?? Date()
let endDate = dateFormatter.date(from: endingAt) ?? Date()


// Actual operational logic
var dateRange: [String] = []
while startDate <= endDate {
    let stringDate = dateFormatter.string(from: startDate)
    startDate = Calendar.current.date(byAdding: .day, value: 1, to: startDate) ?? Date()
    dateRange.append(stringDate)
}

print("Resulting Array - \(dateRange)")

সুইফট 3

var date1 = Date(string: "2010-01-01 00:00:00 +0000")
var date2 = Date(string: "2010-02-03 00:00:00 +0000")
var secondsBetween: TimeInterval = date2.timeIntervalSince(date1)
var numberOfDays: Int = secondsBetween / 86400
print(numberOfDays)

সমস্ত দিনেই সেকেন্ডের পরিমাণ থাকে না।
Pavan

@ পাভান - আপনার উত্তরটি আপডেট করে আরও ভাল করে আপনার ইনপুটগুলি ভাগ করে নেওয়ার জন্য আপনাকে স্বাগত জানানো হচ্ছে।
ক্রুনাল

এটিকে আরও ভাল করার জন্য আপনার পুরো উত্তরটি আমার পুনরায় লেখার প্রয়োজন হবে, সেক্ষেত্রে এটি মুছে ফেলাও হতে পারে কারণ এটি উত্তরের মতো একই সমাধান হবে যা হার্ডকোডযুক্ত মান ব্যবহার করে না :)
প্যাভান

0

আপনি সেকেন্ডে তারিখ রূপান্তর করে পার্থক্যটি সন্ধান করতে পারেন এবং এর জন্য 1970 সাল থেকে সময় ব্যবধান নিতে পারেন এবং তারপরে আপনি দুটি তারিখের মধ্যে পার্থক্য খুঁজে পেতে পারেন।


যখন দুটি তারিখ একে অপরের সাথে সরাসরি গণনা করা যায় (একই সময় ডোমেন ধরে নিচ্ছি)। প্রথমত ১৯ 1970০ সাল থেকে উভয় তারিখ গণনা করার এবং তারপরে পার্থক্যটি খুঁজে পাওয়ার কোনও নির্দিষ্ট কারণ আছে?
Adeel

0

পার্থক্যটি সন্ধান করার জন্য আপনাকে বর্তমানের তারিখ এবং ভবিষ্যতের তারিখটি পাওয়া দরকার। নিম্নলিখিত ক্ষেত্রে, আমি ভবিষ্যতের তারিখের উদাহরণের জন্য 2 দিন ব্যবহার করেছি। দ্বারা গণনা:

2 days* 24 hours* 60 minutes* 60 seconds। আমরা আশা করি 2 দিনের মধ্যে সেকেন্ডের সংখ্যা 172,800 হবে।

// Set the current and future date
let now = Date()
let nowPlus2Days = Date(timeInterval: 2*24*60*60, since: now)

// Get the number of seconds between these two dates
let secondsInterval = DateInterval(start: now, end: nowPlus2Days).duration

print(secondsInterval) // 172800.0

1
দয়া করে একটি উত্তর হিসাবে কেবল কোড পোস্ট করবেন না, তবে আপনার কোডটি কী করে এবং কীভাবে এটি সমস্যার সমস্যার সমাধান করে তা একটি ব্যাখ্যা সরবরাহ করুন। একটি ব্যাখ্যা সহ উত্তরগুলি সাধারণত উচ্চমানের হয় এবং এগুলি আরও বেশি আকর্ষণ করার সম্ভাবনা থাকে।
মার্ক রোটভিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.