Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get time interval for every 30:00(30 minutes) from current time to 10:30 pm

Need help to show the time intervals for every 30 mins, suppose the current time is 11:45 am then

Time intervals should be : 12:00 pm,12:30 pm,01:00 pm,01:30 pm,02:00 pm,02:30 pm......10:30 pm.

 NSString *time = @"10.30 pm";

     NSDate *date1;
        NSDate *date2;
        {
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            [formatter setDateFormat:@"hh.mm a"];
            date1 = [formatter dateFromString:time];
            date2 = [formatter dateFromString:[formatter stringFromDate:[NSDate date]]];

        }
        NSTimeInterval interval = [date1 timeIntervalSinceDate: date2];//[date1 timeIntervalSince1970] - [date2 timeIntervalSince1970];
        int hour = interval / 3600;
        int minute = (int)interval % 3600 / 60;

        NSLog(@"%@ %dh %dm", interval<0?@"-":@"+", ABS(hour), ABS(minute));

This code returns me difference of current time and the given time how can I proceed further.

like image 206
kiran kumar Avatar asked Mar 12 '23 04:03

kiran kumar


1 Answers

You can do something like,

NSString *startTime = @"02:00 AM";
NSString *endTime = @"11:00 AM";


NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"hh:mm a"];
NSDate* fromTime = [timeFormat dateFromString:startTime];
NSDate* toTime = [timeFormat dateFromString:endTime];
NSDate *dateByAddingThirtyMinute ;
NSTimeInterval timeinterval = [toTime timeIntervalSinceDate:fromTime];
NSLog(@"time Int %f",timeinterval/3600);
float numberOfIntervals = timeinterval/3600;
NSLog(@"Start time %f",numberOfIntervals);

for(int iCount = 0;iCount < numberOfIntervals*2 ;iCount ++)
{
    dateByAddingThirtyMinute = [fromTime dateByAddingTimeInterval:1800];
    fromTime = dateByAddingThirtyMinute;
    NSString *formattedDateString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:mm a"];
    formattedDateString = [dateFormatter stringFromDate:dateByAddingThirtyMinute];
    NSLog(@"Time after 30 min %@",formattedDateString);
}

In for loop I have taken numberOfIntervals*2 because time interval is 30 min, so 60/30 = 2 and your datebyAddingThirtyMinute is 1800 because 30 min = 1800 seconds. If you want time after every 10 minutes then it should 60/10 = 6, so it should numberOfIntervals*6. And your datebyAddingThirtyMinute should be [fromTime dateByAddingTimeInterval:600];

Hope this will help :)

like image 60
Ketan Parmar Avatar answered Apr 26 '23 21:04

Ketan Parmar