Как я могу рассчитать разницу между двумя датами?
101009 просмотра
7 ответа
Как я могу рассчитать дни между 1 января 2010 года и (например) 3 февраля 2010 года?
Автор: Frederik Heyninck Источник Размещён: 17.05.2019 03:16Ответы (7)
223 плюса
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
объектами всегда будет зависеть от часового пояса.
Кроме того, эта документация указывает, что реализация времени Какао не учитывает високосных секунд, поэтому, если вам требуется такая точность, вам нужно будет развернуть собственную реализацию.
Автор: dreamlax Размещён: 06.12.2010 11:5878 плюса
Вы можете использовать что-то вроде этого:
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components: NSDayCalendarUnit
fromDate: startDate toDate: endDate options: 0];
days = [components day];
Я считаю, что этот метод учитывает такие ситуации, как даты, которые охватывают изменение летнего времени.
Автор: Casey Fleser Размещён: 07.12.2010 03:1523 плюса
NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // in seconds
где date1
и date2
являются NSDate
«s.
Также обратите внимание на определение NSTimeInterval
:
typedef double NSTimeInterval;
Автор: Chetan
Размещён: 06.12.2010 11:00
18 плюса
Оформить заказ Он учитывает переход на летнее время, високосный год, поскольку он использует календарь iOS для расчета. Вы можете изменить строку и условия, включив минуты с часами и днями.
+(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 @"";
}
Автор: Ankish Jain
Размещён: 18.09.2015 09:43
1 плюс
Swift 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)
Автор: Krunal
Размещён: 15.05.2017 11:13
0 плюса
Вы можете найти разницу, конвертировав дату в секундах и взяв для этого временной интервал с 1970 года, а затем вы можете найти разницу между двумя датами.
Автор: Himanshu Bhatia Размещён: 25.04.2016 05:080 плюса
С Swift 5, в соответствии с вашими потребностями, вы можете использовать один из двух следующих способов, чтобы найти разницу между двумя датами в днях.
# 1. Использование Calendar
«s 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
«s 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")
Автор: Imanou Petit
Размещён: 01.02.2019 12:32
Вопросы из категории :
- objective-c Приложение для iPhone в ландшафтном режиме, системы 2008
- objective-c Как программно отправить смс на айфон?
- objective-c Открытие нестандартного URL в приложении Какао
- objective-c Каков наилучший способ перетащить NSMutableArray?
- swift Как я могу программным образом определить, работает ли мое приложение в симуляторе iphone?
- swift iOS: Convert UTC NSDate to local Timezone
- swift Как установить цель и действие для UIBarButtonItem во время выполнения
- swift Жирный и не жирный текст в одном UILabel?
- xcode Изменить шаблоны в Xcode
- xcode Как вы можете создать Makefile из проекта Xcode?
- xcode Инструменты обнаружения утечки памяти
- xcode Проверка контейнеров STL в Xcode
- date Как получить разницу между двумя датами в JavaScript?
- date Получить последний день месяца в Python
- date DateTime.Now против DateTime.UtcNow
- date Получить последнюю пятницу месяца в Java
- nsdate получить NSDate сегодня, вчера, на этой неделе, на прошлой неделе, в этом месяце, в прошлом месяце ... переменные
- nsdate NSPredicate: filtering objects by day of NSDate property
- nsdate Как рассчитать день года для конкретной даты в Objective-C?