【问题标题】:Calculate total number of weeks from two NSDate从两个 NSDate 计算总周数
【发布时间】:2016-12-20 08:36:19
【问题描述】:

我想检查当前的 NSDate 是否比另一个 NSDate 早 2 周。我可以按照下面的代码做一些事情,但想知道是否有任何正确的方法可以做。

[calendar rangeOfUnit:NSCalendarUnitDay startDate:&currentDate interval:NULL forDate:currentDate];

[calendar rangeOfUnit:NSCalendarUnitDay startDate:&previousDate interval:NULL forDate:previousDate];

NSDateComponents *difference = [calendar components:NSCalendarUnitDay fromDate:previousDate toDate:currentDate options:0];

if(diiference >= 14) { 

}

【问题讨论】:

    标签: ios objective-c nsdate nscalendar


    【解决方案1】:

    你可以在这里使用一个技巧。首先计算两个日期之间的天数,然后计算它们之间的周数。你可以这样做

    -(NSInteger)weeksBetweenDate:(NSDate*)fromDateTime andDate:(NSDate*)toDateTime {
        NSDate *fromDate;
        NSDate *toDate;
    
        NSCalendar *calendar = [NSCalendar currentCalendar];
    
        [calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate
                     interval:NULL forDate:fromDateTime];
        [calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate
                     interval:NULL forDate:toDateTime];
    
        NSDateComponents *difference = [calendar components:NSCalendarUnitDay
                                                   fromDate:fromDate toDate:toDate options:0];
    
        return [difference day] / 7;
    }
    

    如果您想获得像 1.5 这样的周值,您可以使用 CGFloat,如果您想要像 1、2、3 等这样的周数,请保持原样

    【讨论】:

    • 这不是和他输入的一样吗?
    • 是的,我可以做到,但我只是认为苹果不提供这样的发现?
    • yap @Joshua :D 但真的很感谢你的努力,需要一些新的东西。
    【解决方案2】:

    试试这个

    目标 C

    + (NSInteger)daysBetweenDate:(NSDate*)fromDateTime andDate:(NSDate*)toDateTime
    {
    NSDate *fromDate;
    NSDate *toDate;
    
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
    [calendar rangeOfUnit:NSCalendarUnitDay startDate:&fromDate
        interval:NULL forDate:fromDateTime];
    [calendar rangeOfUnit:NSCalendarUnitDay startDate:&toDate
        interval:NULL forDate:toDateTime];
    
    NSDateComponents *difference = [calendar components:NSCalendarUnitDay
        fromDate:fromDate toDate:toDate options:0];
    
    return [difference day];
    }
    

    斯威夫特

    extension NSDate {
    func numberOfDaysUntilDateTime(toDateTime: NSDate, inTimeZone timeZone: NSTimeZone? = nil) -> Int {
    let calendar = NSCalendar.currentCalendar()
    if let timeZone = timeZone {
      calendar.timeZone = timeZone
    }
    
    var fromDate: NSDate?, toDate: NSDate?
    
    calendar.rangeOfUnit(.Day, startDate: &fromDate, interval: nil, forDate: self)
    calendar.rangeOfUnit(.Day, startDate: &toDate, interval: nil, forDate: toDateTime)
    
    let difference = calendar.components(.Day, fromDate: fromDate!, toDate: toDate!, options: [])
    return difference.day
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      相关资源
      最近更新 更多