Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Bart Louwers <bart@emeel.net>
54 lines
1.5 KiB
Objective-C
54 lines
1.5 KiB
Objective-C
#import "TimeIntervalTransformer.h"
|
|
|
|
@implementation TimeIntervalTransformer
|
|
|
|
+ (Class)transformedValueClass {
|
|
return [NSString class];
|
|
}
|
|
|
|
+ (BOOL)allowsReverseTransformation {
|
|
return NO;
|
|
}
|
|
|
|
NSString *NumberAndUnitString(NSInteger quantity, NSString *singular, NSString *plural) {
|
|
return [NSString stringWithFormat:@"%ld %@", quantity, quantity == 1 ? singular : plural];
|
|
}
|
|
|
|
- (id)transformedValue:(id)value {
|
|
if (![value isKindOfClass:[NSValue class]]) {
|
|
return nil;
|
|
}
|
|
|
|
NSTimeInterval timeInterval = [value doubleValue];
|
|
NSInteger seconds = floor(timeInterval);
|
|
NSInteger minutes = floor(seconds / 60);
|
|
seconds -= minutes * 60;
|
|
NSInteger hours = floor(minutes / 60);
|
|
minutes -= hours * 60;
|
|
NSInteger days = floor(hours / 24);
|
|
hours -= days * 24;
|
|
NSInteger weeks = floor(days) / 7;
|
|
days -= weeks * 7;
|
|
|
|
NSMutableArray *components = [NSMutableArray array];
|
|
if (seconds || timeInterval < 60) {
|
|
[components addObject:NumberAndUnitString(seconds, @"second", @"seconds")];
|
|
}
|
|
if (minutes) {
|
|
[components insertObject:NumberAndUnitString(minutes, @"minute", @"minutes") atIndex:0];
|
|
}
|
|
if (hours) {
|
|
[components insertObject:NumberAndUnitString(hours, @"hour", @"hours") atIndex:0];
|
|
}
|
|
if (days) {
|
|
[components insertObject:NumberAndUnitString(days, @"day", @"days") atIndex:0];
|
|
}
|
|
if (weeks) {
|
|
[components insertObject:NumberAndUnitString(weeks, @"week", @"weeks") atIndex:0];
|
|
}
|
|
|
|
return [components componentsJoinedByString:@", "];
|
|
}
|
|
|
|
@end
|