如何为日期选择器设置具体的时间和分钟数?

How to set specific time & minutes to datepicker?

我想根据当前时间和日期选择器时间设置具体时间。

就像用户选择 3:01PM 一样,它会直接转到 3:30PM, 3:20PM 然后 3:45PM, 3:35Pm 然后 4:00PM。 如果 5:00PM 那么 5:15pm.

因此用户将根据 3:00、3:15、3:30、3:45、4:00 等为用户提供时间选项...

我已经做到了这一点 & 当我去 6:01Pm 或以后的任何时候都可以正常工作,除了我不能切换回 5:01Pm (而当前时间是 3:00 下午)

有什么解决办法或可能的问题吗?

试试下面的代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.datePicker addTarget:self action:@selector(datechanged) forControlEvents:UIControlEventValueChanged];

}



 NSDate *date = [self.datePicker date];

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSMinuteCalendarUnit | NSHourCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:date];
    NSInteger minute = [components minute];
    NSInteger hour = [components hour];

if ([components minute] == 0)
    {

        [components setMinute:15];
    }
    else
    {
        NSInteger result =  (minute / 15);

        if (result == 0)
        {
            [components setMinute:30];
        }
        else if(result == 2  || result == 1)
        {
            [components setMinute:45];
        }
        else if (result == 3)
        {
            [components setMinute:60];
        }
    }


    NSDate *newDate = [calendar dateFromComponents: components];

    [self.datePicker setMinimumDate:newDate];
    [self.datePicker reloadInputViews];

您可以像这样设置日期更改方法,允许用户设置日期。

- (IBAction)datechanged:(UIDatePicker *)sender {
NSDate *date = [self.datePicker date];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitMinute | NSCalendarUnitHour |NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:date];

NSInteger minute = [components minute];
NSInteger hour = [components hour];
NSLog(@"%li",(long)hour);

if ([components minute] == 0)
{

    [components setMinute:15];
}
else
{
    NSInteger result =  (minute / 15);

    if (result == 0)
    {
        [components setMinute:30];
    }
    else if(result == 2  || result == 1)
    {
        [components setMinute:45];
    }
    else if (result == 3)
    {
        [components setMinute:60];
    }
}

NSDate *newDate = [calendar dateFromComponents: components];
NSLog(@"%@",newDate);
//[self.datePicker setMinimumDate:newDate];
[self.datePicker setDate:newDate];
[self.datePicker reloadInputViews];
}

更新 1

您可以在 viewDidLoad 方法中设置最小日期(意味着不允许过去的时间)。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.datePicker addTarget:self action:@selector(datechanged) forControlEvents:UIControlEventValueChanged];
    [self.datePicker setMinimumDate:[NSDate date]];

} 

我这对你有帮助,

HTH,享受编码吧!