Search code examples
objective-cios4nsdate

NSDate zero out seconds without rounding up


I would like to know if anyone can help me with my method. I have the following method, which will zero out the seconds value of a NSDate object:

- (NSDate *)dateWithZeroSeconds:(NSDate *)date {
    NSTimeInterval time = round([date timeIntervalSinceReferenceDate] / 60.0) * 60.0;
    return  [NSDate dateWithTimeIntervalSinceReferenceDate:time];
}

The problem is when passed a date such as:

2011-03-16 18:21:43 +0000

it returns:

2011-03-16 18:22:00 +0000

I do not want this rounding to occur, as it is a user who is actually specifying the date, so it needs to be exact to the minute they request.

Any help is greatly appreciated.


Solution

  • Use floor instead of round:

    - (NSDate *)dateWithZeroSeconds:(NSDate *)date
    {
        NSTimeInterval time = floor([date timeIntervalSinceReferenceDate] / 60.0) * 60.0;
        return  [NSDate dateWithTimeIntervalSinceReferenceDate:time];
    }