मैं 1 जनवरी 2010 और (उदाहरण के लिए) 3 फरवरी 2010 के बीच के दिनों की गणना कैसे कर सकता हूं?
मैं 1 जनवरी 2010 और (उदाहरण के लिए) 3 फरवरी 2010 के बीच के दिनों की गणना कैसे कर सकता हूं?
जवाबों:
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
ऑब्जेक्ट्स के बीच सेकंड की संख्या हमेशा समय-क्षेत्र-अज्ञेयवादी होगी।
इसके अलावा, यह प्रलेखन निर्दिष्ट करता है कि कोको के समय का कार्यान्वयन लीप सेकंड के लिए जिम्मेदार नहीं है, इसलिए यदि आपको ऐसी सटीकता की आवश्यकता है, तो आपको अपने स्वयं के कार्यान्वयन की आवश्यकता होगी।
cocoa
और cocoa-touch
इसलिए यह जवाब केवल मैक ओएस एक्स पर ही लागू होता है।
आप कुछ इस तरह का उपयोग करना चाहते हैं:
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];
days = [components day];
मेरा मानना है कि यह विधि उन स्थितियों के लिए जिम्मेदार है जैसे कि दिन की बचत में परिवर्तन।
NSDate
ऑब्जेक्ट पहले से ही समय-क्षेत्र अज्ञेयवादी हैं। समय-क्षेत्र की जानकारी को निकाल दिया जाता है जब उदाहरण के साथ तारीखें डालते हैं NSDateFormatter
, ताकि NSDate
समय में ऑब्जेक्ट सटीक क्षणों का प्रतिनिधित्व करें। इसलिए, यदि आपके पास पहले से ही है startDate
और endDate
, ये दोनों वस्तुएं अलग-अलग सेकंड की x संख्या होंगी । टाइम-ज़ोन का इससे कोई लेना-देना नहीं होगा।
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds
कहाँ हैं date1
और date2
हैं NSDate
।
इसके अलावा, इसकी परिभाषा पर ध्यान दें NSTimeInterval
:
typedef double NSTimeInterval;
इसे चेकआउट करें। यह दिन के उजाले की बचत का ख्याल रखता है, यह गणना करने के लिए आईओएस कैलेंडर का उपयोग करता है। आप घंटों और दिनों के साथ मिनटों को शामिल करने के लिए स्ट्रिंग और स्थितियों को बदल सकते हैं।
+(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 @"";
}
स्विफ्ट 5 और आईओएस 12 के साथ, अपनी आवश्यकताओं के अनुसार, आप दिनों में दो तिथियों के बीच अंतर खोजने के लिए निम्नलिखित दो तरीकों में से एक का उपयोग कर सकते हैं।
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)
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")
स्विफ्ट 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)
आप तारीखों को सेकंडों में परिवर्तित करके अंतर खोज सकते हैं और इसके लिए 1970 से समय अंतराल ले सकते हैं और फिर आप दो तिथियों के बीच अंतर पा सकते हैं।
अंतर खोजने के लिए, आपको भविष्य में वर्तमान तिथि और तारीख प्राप्त करने की आवश्यकता है। निम्नलिखित मामले में, मैंने भविष्य की तारीख के उदाहरण के लिए 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