从 7 天前开始获取 NSDate

Get NSDate from start of 7 days ago

我正在尝试绘制一些简单的 7 天历史记录。给定当前 NSDate.date,我想获取对应于 7 天前一天开始的 NSDate。所以基本上是今天早上 0.00 之前的 7 天。

我试过的是:

// decompose the current date, do I need more component fields?
NSDateComponents *comps = [NSCalendar.currentCalendar components: NSDayCalendarUnit fromDate: NSDate.date]; 
NSLog(@"components: %@", comps);
// Back day up 7 days. Will this wrap appropriate across month/year boundaries?
comps.day -= 7;
NSDate *origin = comps.date;
NSLog(@"new date: %@", origin);

我假设的是,只要指定 NSDayCalendarUnit,其他的东西就是默认值(比如一天的开始等)。不幸的是,origin 最终变成了 (null)。正确的做法是什么?

要构造一个新日期,您不仅要知道日期,还要知道月份和年份。所以你应该添加 NSYearCalendarUnit | NSMonthCalendarUnit。您还应该设置 NSDateComponents 实例的日历和可能的时区属性:

NSDateComponents *comps = [NSCalendar.currentCalendar components: NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit fromDate: NSDate.date];
comps.calendar = NSCalendar.currentCalendar;
comps.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSLog(@"components: %@", comps);
// Back day up 7 days. Will this wrap appropriate across month/year boundaries?
comps.day -= 7;
NSDate *origin = comps.date;
NSLog(@"new date: %@", origin);