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.
To be complete, here is the code referenced to iOS SDK 8.1 using NSCalendar and NSDateComponents.
+ (NSDate *)truncateSecondsForDate:(NSDate *)fromDate;
{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSCalendarUnit unitFlags = NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
NSDateComponents *fromDateComponents = [gregorian components:unitFlags fromDate:fromDate ];
return [gregorian dateFromComponents:fromDateComponents];
}
Note that as of iOS 8 the calendar unit names have changed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With