0

I am trying to make a countdown timer, however I am struggling with my code. I have a UIDatePicker to select the date to countdown to, but ever every time I try to do a countdown the seconds start at 54 seconds instead of adjusting to the actual time of the device. The code is very simple and straightforward, but I am struggling to figure it out.

- (IBAction)startCountdown:(id)sender {
if (ti == 0||ti <= 0) {
    [self stopCountdown:self];
}

//Set up a timer that calls the updateTime method every second to update the label
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                         target:self
                                       selector:@selector(updateTime)
                                       userInfo:nil
                                        repeats:YES];
}
-(void)updateTime{


//Get the time left until the specified date and convert time into seconds.
NSInteger ti = ((NSInteger)[self.datePicker.date timeIntervalSinceNow]); //this is the key part of the code.
NSInteger seconds = ti % 60;
NSInteger minutes = (ti / 60) % 60;
NSInteger hours = (ti / 3600) % 24;
//NSInteger days = (ti / 86400);

//Update the lable with the remaining time
//self.countdownLabel.text = [NSString stringWithFormat:@"%02i days %02i hrs %02i min %02i sec", days, hours, minutes, seconds];
self.countdownLabel.text = [NSString stringWithFormat:@"%02i hrs %02i min %02i sec", hours, minutes, seconds];

}

Please help me out it would be much appreciated!

Thank you in advance friends!!

1 Answers1

0

There is more easy way to extract time units that can prevent errors in calculations. Take a look at [NSCalendar components:fromDate:toDate:options:]

It may become:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit components = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *diff = [calendar components:components fromDate:self.datePicker.date toDate:now options:0];
NSInteger seconds = [diff second];
NSInteger minutes = [diff minute];
NSInteger hours = [diff hour];
Max Komarychev
  • 2,836
  • 1
  • 21
  • 32