简体   繁体   English

获取两个日期之间的差异?

[英]Get difference between two dates?

I have two dates in 24 hours formate like (dd-MMM-yyyy HH:mm).我在 24 小时格式中有两个日期,例如 (dd-MMM-yyyy HH:mm)。 I want to get a difference between these two dates.我想知道这两个日期之间的差异。

My Code : This is getting only dates, I want a number of days and remaining time in hours also.我的代码:这只是获取日期,我还想要天数和剩余时间(以小时为单位)。 (like 6days 5 hours) (比如 6 天 5 小时)

    NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
    int numberOfDays = secondsBetween / 86400;
    NSLog(@"There are %d days in between the two dates.", numberOfDays);

NSDateComponentsFormatter can do that NSDateComponentsFormatter可以做到这一点

NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.allowedUnits = NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
NSLog(@"%@", [formatter stringFromTimeInterval:secondsBetween]);

See NSDateComponentsFormatterUnitsStyle for other styles.有关其他样式,请参阅NSDateComponentsFormatterUnitsStyle

Swift 3+斯威夫特 3+

you can use date-components, like:您可以使用日期组件,例如:

let date1 = Date()
let date2 = Date(timeIntervalSinceNow: 12345678)

let dateComponets = Calendar.current.dateComponents([.day, .hour], from: date1, to: date2)

then you can see the difference in days:然后你可以看到天数的差异:

debugPrint(dateComponets.day, dateComponets.hour) // 142 (days), 22 (hours)

ObjC对象

same approach, but different syntax:相同的方法,但不同的语法:

NSDate * date1 = [NSDate new];
NSDate * date2 = [NSDate dateWithTimeIntervalSinceNow:12345678];

NSDateComponents * dateComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitHour fromDate:date1 toDate:date2 options:0];

then the difference in days:那么天数的差异:

NSLog(@"%d, %d", dateComponents.day, dateComponents.hour); // 142 (days), 22 (hours)
struct EventDate {
var monthYear: [String]?
var monthNumber: [String]?
var year: [String]?
var month: [String]?
init(monthYear: [String]?,monthNumber:[String]?,year:[String]?,month:[String]?) {
    self.monthYear = monthYear
    self.monthNumber = monthNumber
    self.year = year
    self.month = month
}

}

func getMonthAndYearBetween(from start: String, to end: String) -> EventDate {

    var monthYear: [String] = []
    var monthNumber: [String] = []
    var years: [String] = []
    var months: [String] = []

    let format = DateFormatter()
    format.dateFormat = "dd/MM/yyyy"

    guard let startDate = format.date(from: start),
        let endDate = format.date(from: end) else {
            return EventDate(monthYear: [], monthNumber: [], year: [], month: [])
    }

    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents(Set([.month]), from: startDate, to: endDate)

    var allDates: [String] = []
    let dateRangeFormatter = DateFormatter()
    dateRangeFormatter.dateFormat = "MMM yyyy"

    for i in 0 ... (components.month! + 1) {
        guard let date = calendar.date(byAdding: .month, value: i, to: startDate) else {
            continue
        }

        let formattedDate = dateRangeFormatter.string(from: date)
        allDates += [formattedDate]

        let df = DateFormatter()
        df.dateFormat = "MMM yyyy"
        let monyr = df.string(from: date)
        monthYear.append(monyr)
        df.dateFormat = "MM"
        let monNO = df.string(from: date)
        monthNumber.append(monNO)
        df.dateFormat = "yyyy"
        let yr = df.string(from: date)
        years.append(yr)
        df.dateFormat = "MMM"
        let mon = df.string(from: date)
        months.append(mon)

    }
    return EventDate(monthYear: monthYear, monthNumber: monthNumber, year: years, month: months)
}

you can get like this你可以这样

let eventDate = Date().getMonthAndYearBetween(from: startDate, to: endDate)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM