का उपयोग करके दो तिथियों के बीच महीनों की संख्या निर्धारित करें मैं कोको का उपयोग करके दो तिथियों के बीच महीनों की संख्या की गणना कैसे करूं?कोको
धन्यवाद, NSCalendars components:fromDate:toDate:options विधि पर स्टेन
का उपयोग करके दो तिथियों के बीच महीनों की संख्या निर्धारित करें मैं कोको का उपयोग करके दो तिथियों के बीच महीनों की संख्या की गणना कैसे करूं?कोको
धन्यवाद, NSCalendars components:fromDate:toDate:options विधि पर स्टेन
देखो। fromDate: todate: विकल्प सही ढंग से निम्न उदाहरण के लिए काम नहीं करता:
प्रारम्भ दिनांक: यह आप तारीखों घटाना और फिर महीनों संपत्ति मान प्राप्त करने के
NSInteger month = [[[NSCalendar currentCalendar] components: NSCalendarUnitMonth
fromDate: yourFirstDate
toDate: yourSecondDate
options: 0] month];
घटकों की अनुमति देता है जनवरी 01, 2012 अंतिम तिथि नहीं : 31 मार्च विधि से ऊपर का उपयोग कर महीने की 2012
num = 2
सही उत्तर 3 महीने होना चाहिए।
मैं निम्नानुसार गणनाओं का लंबा तरीका उपयोग कर रहा हूं: 1. आरंभ माह में दिनों की संख्या पाएं। इसे महीने के अंश भाग में जोड़ें। यदि पहली तारीख महीने की शुरुआत है, तो इसे पूरे महीने के रूप में गिनें। 2. अंत महीने में दिनों की संख्या पाएं। इसे महीने के अंश भाग में जोड़ें अगर तिथि महीने का आखिरी महीना है तो इसे पूर्ण महीने के रूप में गिना जाता है। 3. 2 तिथियों के बीच पूरे/पूर्ण महीनों को ढूंढें और महीने के पूर्णांक भाग में जोड़ें। 4. सही मान प्राप्त करने के लिए महीनों के अंश भाग & पूर्णांक जोड़ें।
एक जवाब है कि एक महीने के अंश शामिल हैं निम्नलिखित इस्तेमाल किया जा सकता प्राप्त करने के लिए:
- (NSNumber *)numberOfMonthsBetweenFirstDate:(NSDate *)firstDate secondDate:(NSDate *)secondDate {
if ([firstDate compare:secondDate] == NSOrderedDescending) {
return nil;
}
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *firstDateComponents = [calendar components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit
fromDate:firstDate];
NSInteger firstDay = [firstDateComponents day];
NSRange rangeOfFirstMonth = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:firstDate];
NSUInteger numberOfDaysInFirstMonth = rangeOfFirstMonth.length;
CGFloat firstMonthFraction = (CGFloat)(numberOfDaysInFirstMonth - firstDay)/(CGFloat)numberOfDaysInFirstMonth;
// last month component
NSDateComponents *lastDateComponents = [calendar components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit
fromDate:secondDate];
NSInteger lastDay = [lastDateComponents day];
NSRange rangeOfLastMonth = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:secondDate];
NSUInteger numberOfDaysInLastMonth = rangeOfLastMonth.length;
CGFloat lastMonthFraction = (CGFloat)(lastDay)/(CGFloat)numberOfDaysInLastMonth;
// Check if the two dates are within the same month
if (firstDateComponents.month == lastDateComponents.month
&& firstDateComponents.year == lastDateComponents.year) {
NSDateComponents *dayComponents = [calendar components:NSDayCalendarUnit
fromDate:firstDate
toDate:secondDate
options:0];
NSRange rangeOfMonth = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:firstDate];
NSUInteger numberOfDaysInMonth = rangeOfMonth.length;
return [NSNumber numberWithFloat:(CGFloat)dayComponents.day/(CGFloat)numberOfDaysInMonth];
}
// Start date of the first complete month
NSDateComponents *firstDateFirstDayOfNextMonth = firstDateComponents;
firstDateFirstDayOfNextMonth.month +=1;
firstDateFirstDayOfNextMonth.day = 1;
// First day of the last month
NSDateComponents *secondDateFirstDayOfMonth = lastDateComponents;
secondDateFirstDayOfMonth.day = 1;
NSInteger numberOfMonths = secondDateFirstDayOfMonth.month - firstDateFirstDayOfNextMonth.month
+ (secondDateFirstDayOfMonth.year - firstDateFirstDayOfNextMonth.year) * 12;
return [NSNumber numberWithFloat:(firstMonthFraction + numberOfMonths + lastMonthFraction)];
}
मैं दो तिथियों के बीच के महीनों में परिवर्तन की गणना करने के लिए किया था। इसका मतलब है कि 31 जनवरी से 1 फरवरी तक 1 महीने बीत चुका है NSCalendar.components
वापस 0
import UIKit
func monthsSince(from: NSDate, to: NSDate) -> Int {
let fromComponents = NSCalendar.currentCalendar().components([.Month, .Year], fromDate: from)
let toComponents = NSCalendar.currentCalendar().components([.Month, .Year], fromDate: to)
return ((toComponents.year - fromComponents.year) * 12) + (toComponents.month - fromComponents.month)
}
let tests = [
(from: (day: 1, month: 1, year: 2016), to: (day: 31, month: 1, year: 2016), result: 0),
(from: (day: 22, month: 1, year: 2016), to: (day: 5, month: 2, year: 2016), result: 1),
(from: (day: 22, month: 12, year: 2015), to: (day: 1, month: 1, year: 2016), result: 1),
(from: (day: 1, month: 1, year: 2016), to: (day: 1, month: 2, year: 2016), result: 1),
(from: (day: 1, month: 1, year: 2016), to: (day: 1, month: 3, year: 2016), result: 2)
]
for test in tests {
let from = NSCalendar.currentCalendar().dateWithEra(1, year: test.from.year, month: test.from.month, day: test.from.day, hour: 0, minute: 0, second: 0, nanosecond: 0)!
let to = NSCalendar.currentCalendar().dateWithEra(1, year: test.to.year, month: test.to.month, day: test.to.day, hour: 0, minute: 0, second: 0, nanosecond: 0)!
if monthsSince(from, to: to) == test.result {
print("Test \(test), Passed!")
} else {
print("Test \(test), Failed!")
}
}
बिल्कुल मुझे जो चाहिए - धन्यवाद। –