ios – 从UIDatePicker中选择的日期与保存的日期不同

这就是我设置datePicker的方法

self.datePicker = [[UIDatePicker alloc] init];
self.datePicker.timeZone = [NSTimeZone localTimeZone];

这就是我保存所选日期的方式

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeZone:[NSTimeZone localTimeZone]];
dateToSave = [formatter dateFromString:self.dateTextField.text];
NSLog(@"date saved = %@", dateToSave);

如果我从日期选择器中选择2013年11月18日,NSLog会显示

date saved = 2013-11-17 16:00:00 +0000

但是,在我的代码中的某个地方,我需要在今天的日期和我在datepicker中选择的日期之间的天数中获得差异.

NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit fromDate:[NSDate date] toDate:dateSaved options:0];
NSLog(@"number of days => %i", [dateComponents day]);

今天是11月10日.我保存的日期是11月18日.但天数差异是7,而不是8.

最佳答案 (此答案是指有关计算天数的更新问题

在两个日期之间.)

问题是[NSDate date]是当前日期时间,而不是当天的开始日期.例如,如果

 [NSDate date] = "2013-11-10 10:00:00"
 dateSaved     = "2013-11-18 00:00:00"    (both in your *local* timezone)

那么之间的区别
这两个日期是“7天14小时”.因此,您获得7天的天数.

所以你必须先计算当天的开始时间:

NSDate *startOfDay;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
                                startDate:&startOfDay
                                 interval:NULL
                                  forDate:[NSDate date]];

然后用它来计算差异:

NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit
                                           fromDate:startOfDay
                                             toDate:dateSaved
                                            options:0];
点赞