1 Ocak 2010 ile (örneğin) 3 Şubat 2010 arasındaki günleri nasıl hesaplayabilirim?
1 Ocak 2010 ile (örneğin) 3 Şubat 2010 arasındaki günleri nasıl hesaplayabilirim?
Yanıtlar:
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);
Unutmayın, NSDate
nesneler zamanın kesin anlarını temsil eder, ilişkili herhangi bir zaman dilimi bilgisine sahip değildirler. Bir örneğin kullanarak bir tarihe bir dize dönüştürdüğünüzde NSDateFormatter
, NSDateFormatter
dönüştürür yapılandırılan saat dilimine itibaren geçen süre. Bu nedenle, iki NSDate
nesne arasındaki saniye sayısı her zaman zaman zaman diliminden bağımsız olacaktır.
Ayrıca, bu dokümantasyon Cocoa'nın zaman uygulamasının artık saniyeleri hesaba katmadığını belirtir , bu nedenle böyle bir doğruluğa ihtiyaç duyarsanız, kendi uygulamanızı devreye almanız gerekecektir.
cocoa
ve bu cocoa-touch
nedenle bu yanıt yalnızca Mac OS X için geçerli değildir .
Bunun gibi bir şey kullanmak isteyebilirsiniz:
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];
days = [components day];
Bu yöntemin gün ışığı tasarrufundaki bir değişikliği kapsayan tarihler gibi durumları hesaba kattığına inanıyorum.
NSDate
nesneler zaten zaman diliminden bağımsızdır. Tarihler örn. İle ayrıştırılırken saat dilimi bilgileri kaldırılır NSDateFormatter
, böylece NSDate
nesneler zamandaki tam anları temsil eder. Bu nedenle, zaten startDate
ve sahipseniz endDate
, bu iki nesne x saniye aralıklı olacaktır. Zaman dilimlerinin bununla hiçbir ilgisi olmayacak.
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds
burada date1
ve date2
vardır NSDate
's.
Ayrıca şunun tanımına da dikkat edin NSTimeInterval
:
typedef double NSTimeInterval;
Şuna bak. Hesaplamak için iOS takvimini kullandığı için gün ışığından yararlanma, artık yıl ile ilgilenir. Dizeyi ve koşulları, saat ve günlerle dakikaları içerecek şekilde değiştirebilirsiniz.
+(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 @"";
}
Swift 5 ve iOS 12 ile ihtiyacınıza göre iki tarih arasındaki farkı gün olarak bulmak için aşağıdaki iki yoldan birini kullanabilirsiniz.
Calendar
bireyin dateComponents(_:from:to:)
yöntemiimport 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
bireyin string(from:to:)
yöntemiimport 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")
Swift 4
Bunu deneyin ve bakın (String ile tarih aralığı):
// 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)")
Hızlı 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)
Tarihi saniye cinsinden çevirerek farkı bulabilir ve bunun için 1970'den beri zaman aralığı alabilir ve ardından iki tarih arasındaki farkı bulabilirsiniz.
Farkı bulmak için, gelecekteki güncel tarihi ve tarihi almanız gerekir. Aşağıdaki durumda, gelecek tarihin bir örneği için 2 gün kullandım. Hesaplayan:
2 days
* 24 hours
* 60 minutes
* 60 seconds
. 2 gündeki saniye sayısının 172.800 olmasını bekliyoruz.
// 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