2013-10-16 66 views
0

我是新来的ios开发。我正在使用uipickerview制作一个自定义日期选择器。我有日期阵列用作uipickerview的数据源。自定义DatePicker使用UIPIckerView

我想知道如何仅显示标签:今天,明天,周五,周六,周日,周一,本周的周二和休息日的格式为“EEE,LLL d”。

我试过这段代码,但没有奏效。

for(int i=0;i<22;i++) 
{ 
    NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24 * i]; 
    NSDate *now=[NSDate date]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setDateFormat:@"EEE, LLL d"]; 
    if(myDate==now) 
    { 
     NSString *[email protected]"today"; 
     [datesArray addObject:myDateString]; 
    } 
    else 
    { 
    NSString *myDateString = [dateFormatter stringFromDate:myDate]; 

    [datesArray addObject:myDateString]; 
    } 

} 

回答

1

尝试this.Hope它有助于

NSString *dateFromWS = @"2013-10-16";//im taking it as static you have to take string coming from webservice 

for (int i = 0; i < 22; i++) 
{ 
    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
    [dateFormatter1 setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24 * i]; 
    NSDate *now = [dateFormatter1 dateFromString:dateFromWS]; 
    NSDate *tomorrow = [NSDate dateWithTimeInterval:60 * 60 * 24 * 1 sinceDate:now]; 
    //NSDate *dummy = [NSDate dateWithTimeInterval:60 * 60 * 24 * 1 sinceDate:now]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setDateFormat:@"EEE, LLL d"]; 
    NSString *loopDate = [dateFormatter stringFromDate:myDate]; 
    NSString *today = [dateFormatter stringFromDate:now]; 
    NSString *tomorrowString = [dateFormatter stringFromDate:tomorrow]; 
    if ([loopDate isEqualToString:today]) { 
     [datesArray addObject:@"today"]; 
    } else if ([loopDate isEqualToString:tomorrowString]) { 
     [datesArray addObject:@"tomorrow"]; 
    } else if ((i/7) < 1) { 
     [datesArray addObject:[loopDate substringToIndex:3]]; 
    } else { 
     [datesArray addObject:loopDate]; 
    } 
} 
+0

如何使用webservice的日期作为开始日期(当前日期)? – user2885928

+0

你可以发布来自webservice的日期,我需要知道你的日期来自哪种格式 –

+0

这可能是最好的另一个问题。我收集这涉及比这个数组更多的选择器委托和数据源。 –

0
if(myDate==now) 

在比较两个指针不是2个日期。您需要使用下面的代码

if([myDate compare:now] == NSOrderedSame) 
+0

我还没有看到。不为我工作! – user2885928

0

除了西蒙的指针问题,你的日期将包括时间信息,所以是绝不可能是相同的。可能是同一天,但不是同一时间。你需要找到一天是否匹配。我这样做的:

for(int i=0;i<22;i++) 
{ 
    NSDate *myDate = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24 * i]; 
    NSDate *myDateNoTime = nil; 
    // Note: Create sysCal as a property so it is not being repeatedly recreated here 
    [self.sysCal rangeOfUnit:NSDayCalendarUnit startDate:&myDateNoTime interval:nil forDate:myDate]; 
    NSDate *now=[NSDate date]; 
    NSDate *todayDateNoTime = nil; 
    [self.sysCal rangeOfUnit:NSDayCalendarUnit startDate:&todayDateNoTime interval:nil forDate:now]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setDateFormat:@"EEE, LLL d"]; 

    if([myDateNoTime isEqualToDate:todayDateNoTime]) 
    { 
     NSString *myDateString=@"today"; 
     [datesArray addObject:myDateString]; 
    } 
    else 
    { 
    NSString *myDateString = [dateFormatter stringFromDate:myDate]; 

    [datesArray addObject:myDateString]; 
    } 

} 
0

鉴于你的服务器的日期和要求,在我看来,处理拣货机更好的办法,我会把这个数据源中的方法来代替。

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

    NSString *resultString = nil; 
    NSDate *myDate = [self dateForRow:row]; 
    NSDate *myDateNoTime = nil; 
    // Note: Create sysCal as a property so it is not being repeatedly recreated here 
    [self.sysCal rangeOfUnit:NSDayCalendarUnit startDate:&myDateNoTime interval:nil forDate:myDate]; 
    NSDate *now=[NSDate date]; 
    NSDate *todayDateNoTime = nil; 
    [self.sysCal rangeOfUnit:NSDayCalendarUnit startDate:&todayDateNoTime interval:nil forDate:now]; 

    if([myDateNoTime isEqualToDate:todayDateNoTime]) 
    { 
     resultString = @"Today"; 
    } else { 
     // Note: using property for date formatter so I am not repeatedly creating here 
     resultString = [self.dayFormatter stringFromDate:myDate]; 
    } 

    return resultString; 
} 

要确定日期行使用:

-(NSDate *)dateFromRow:(NSInteger)inRow { 
    NSDateComponents *daysToAdd = [[NSDateComponents alloc] init]; 
    [daysToAdd setCalendar:self.sysCal]; 
    NSInteger daysCalc = (-1 * (inRow -2)); 
    [daysToAdd setDay:daysCalc]; 
    NSDate *resultDate = nil; 

    NSDate *calcDate = [self.sysCal dateByAddingComponents:daysToAdd 
                toDate:self.myServerDate 
                options:0]; 

    [self.sysCal rangeOfUnit:NSDayCalendarUnit startDate:&resultDate interval:nil forDate:calcDate]; 

    return resultDate; 
} 

我想你已经设定的方式,你正在做的,但我认为你会发现这更加灵活,没有限制到21天在服务器日期之前或之后。 Aircode,请原谅任何错字或语法错误。

0

雨燕 “今天” 4.0

for i in 0..<22 { 
    var myDate = Date(timeIntervalSinceNow: 60 * 60 * 24 * i) 
    var now = Date() 
    var dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = .medium 
    dateFormatter.dateFormat = "EEE, LLL d" 

    if myDate == now { 
     var myDateString = "today" 
     datesArray.append(myDateString) 
    } else { 
     var myDateString: String = dateFormatter.string(from: myDate) 
     datesArray.append(myDateString) 
    } 
}