我有一个类似于13,27,29的字符串,表示我希望将它们分成日期对象的月份中的几天
mayString = [mayString componentsSeparatedByString:@","];
然后我希望能够计算出这些天中的哪一天,即13或27或29最接近今天的日期,显然上述日期将是27,作为当前日期的下一个最接近的日期。
我可以使用下面的方法来获取当天,但实际上仍然坚持如何获得这样做的逻辑?
//Grab current day from sys date
NSDateFormatter *dayFormatter = [[NSDateFormatter alloc] init];
[dayFormatter setDateFormat:@"dd"];
NSString *dayString = [dayFormatter stringFromDate:[NSDate date]];
我有一个部分完成的解决方案,但它似乎没有给我正确的数组中的索引最接近当天的结果(sepDates是一个数组)
sepDates = [mayString componentsSeparatedByString:@","];
//Day string is todays date i.e 16 (16th)
NSDate *dayFromString = [dayFormatter dateFromString:dayString];
NSLog(@"Day from string %@", dayFromString);
double min = [dayFromString timeIntervalSinceDate:[sepDates objectAtIndex:0]];
NSLog(@"Min %f", min);
//I then want to calculate which of the dates in the sepDates array at index is closest to todays current day 16
int minIndex = 0;
for (int d = 1; d < [sepDates count]; ++d)
{
double currentmin = [dayFromString timeIntervalSinceDate:[sepDates objectAtIndex:d]];
if (currentmin < min) {
min = currentmin;
minIndex = d;
NSLog(@"minIndex = %d", minIndex);
}
}
答案 0 :(得分:1)
[currentDayString integerValue]
)搜索最近一天的实际算法是迭代您的初始数组,并找到数组和当前值之间的差异。将这些差异存储在单独的数组中在第二个数组中找到最小值。最小差异的位置(索引)将与第一个数组中最近一天的位置相同。
以下是问题中提供正确minIndex
的代码段NSArray *sepDates = @[@"13", @"15", @"27", @"29"];
NSDateFormatter *dayFormatter = [[NSDateFormatter alloc] init];
[dayFormatter setDateFormat:@"dd"];
NSString *dayString = [dayFormatter stringFromDate:[NSDate date]];
NSDate *dayFromString = [dayFormatter dateFromString:dayString];
NSLog(@"Day from string %@", dayFromString);
NSInteger min = [[sepDates lastObject] integerValue]; //or set it to some large int
NSLog(@"Min %d", min);
int minIndex = 0;
for (int d = 1; d < [sepDates count]; ++d)
{
NSInteger currentmin = [sepDates[d] integerValue] - [dayString integerValue];
NSLog(@"Current min: %d", currentmin);
//currentmin must be positive since you need next closest day
if (currentmin > 0 && currentmin < min) {
min = currentmin;
minIndex = d;
NSLog(@"minIndex = %d", minIndex);
}
}
答案 1 :(得分:0)
迭代您的日期并计算当前目标的时间并存储该日期,如果它小于先前计算的或未计算任何内容(即第一个元素)。结果将给你答案。
答案 2 :(得分:0)
这样做。
分开日期后。将它们转换为int并将它们添加到可变索引集中。
然后,使用日期格式化程序将今天的日期作为字符串格式为“dd”,将今天的日期(日期字符串)转换为int,然后将该日期添加到可变索引集。
NSMutableIndexSet是自动排序的。
然后这样做
NSInteger closestDateAsInt = [indexSet indexGreaterThanIndex:''today's date as int"];
这将给你最近的下一个日期。
一旦你有最接近的日期的int值。使用日期组件将其转换为日期。
希望这会有所帮助。欢呼声。