Revision: 28347
          http://sourceforge.net/p/bibdesk/svn/28347
Author:   hofman
Date:     2023-09-14 21:47:53 +0000 (Thu, 14 Sep 2023)
Log Message:
-----------
Add periods to date after getting start of period, so we can be sure we don't 
overflow.

Modified Paths:
--------------
    trunk/bibdesk/NSDate_BDSKExtensions.m

Modified: trunk/bibdesk/NSDate_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSDate_BDSKExtensions.m       2023-09-14 14:54:50 UTC (rev 
28346)
+++ trunk/bibdesk/NSDate_BDSKExtensions.m       2023-09-14 21:47:53 UTC (rev 
28347)
@@ -265,7 +265,7 @@
     return [formatter stringFromDate:self];
 }
 
-- (NSDate *)startOfPeriod:(BDSKPeriod)period {
+- (NSDate *)startOfPeriod:(BDSKPeriod)period byAdding:(NSInteger)offset {
     NSCalendar *calendar = [NSCalendar currentCalendar];
     NSUInteger unitFlags;
     if (period == BDSKPeriodWeek)
@@ -295,40 +295,37 @@
             NSLog(@"Unknown period %ld", (long)period);
             break;
     }
-    return [calendar dateFromComponents:components];
-}
-
-- (NSDate *)startOfPeriod:(BDSKPeriod)period byAdding:(NSInteger)offset {
-    NSDate *date = self;
+    
+    NSDate *date = [calendar dateFromComponents:components];
+    
     if (offset != 0) {
-        NSDateComponents *components = [[NSDateComponents alloc] init];
-        [components setDay:0];
-        [components setMonth:0];
-        [components setYear:0];
+        NSCalendarUnit unit = 0;
         switch (period) {
             case BDSKPeriodDay:
-                [components setDay:offset];
+                unit = NSCalendarUnitDay;
                 break;
             case BDSKPeriodWeek:
-                [components setWeekday:0];
-                [components setWeekOfYear:offset];
-                [components setDay:NSDateComponentUndefined];
-                [components setMonth:NSDateComponentUndefined];
+                unit = NSCalendarUnitWeekOfYear;
                 break;
             case BDSKPeriodMonth:
-                [components setMonth:offset];
+                unit = NSCalendarUnitMonth;
                 break;
             case BDSKPeriodYear:
-                [components setYear:offset];
+                unit = NSCalendarUnitYear;
                 break;
             default:
                 NSLog(@"Unknown period %ld", (long)period);
                 break;
         }
-        date = [[NSCalendar currentCalendar] dateByAddingComponents:components 
toDate:self options:0];
-        [components release];
+        if (unit != 0)
+            date = [calendar dateByAddingUnit:unit value:offset toDate:date 
options:0];
     }
-    return [date startOfPeriod:period];
+    
+    return date;
 }
 
+- (NSDate *)startOfPeriod:(BDSKPeriod)period {
+    return [self startOfPeriod:period byAdding:0];
+}
+
 @end

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to