最近一個公司一個項目里有個坑,顯示不了0點的數據,修改起始時間為前一天23點59分59秒則可以顯示。
查看了獲取當天0點代碼,和網上查到的結果基本一致,如下所示(使用Category On NSDate):
1 - (NSDate *)zeroOfDate 2 { 3 NSCalendar *calendar = [NSCalendar currentCalendar]; 4 NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:self]; 5 components.hour = 0; 6 components.minute = 0; 7 components.second = 0; 8 return [calendar dateFromComponents:components]; 9 }
加上Log發現return的date NSTimeInterval的小數點后的值不為0,因為nanosecond不為0,而iOS里又不能使用components.nanosecond = 0,於是用以下辦法解決:
1 - (NSDate *)zeroOfDate 2 { 3 NSCalendar *calendar = [NSCalendar currentCalendar]; 4 NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:self]; 5 components.hour = 0; 6 components.minute = 0; 7 components.second = 0; 8 9 // components.nanosecond = 0 not available in iOS 10 NSTimeInterval ts = (double)(int)[[calendar dateFromComponents:components] timeIntervalSince1970]; 11 return [NSDate dateWithTimeIntervalSince1970:ts]; 12 }
做個標記,以防以后被坑。