Take a look at this library: https://github.com/mysterioustrousers/MTDates
I had the similar problem I've decided to use it. It has a lot of date related functions. The one you need is:
- (NSDate *)mt_startOfCurrentDay;
About time zones. NSDate has independent from time zone format. Time zone you need you can specify in NSDateFormatter instance.
Update Full code example
NSDate *date = [NSDate date];
NSLog(@"%@", date); // 2014-02-20 11:11:40 +0000
[NSDate mt_setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSLog(@"%@", [[date mt_startOfCurrentDay] mt_stringFromDateWithISODateTime]); // 2014-02-20 00:00:00 +0000
For other date format, setup NSDateFormatter with time zone and your custom date format
One more solution This one without library:
NSDate *date = [NSDate date];
NSLog(@"%@", date); // 2014-02-20 11:36:20 +0000
NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:currentCalendar.calendarIdentifier];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDateComponents* components = [calendar components:flags fromDate:date];
date = [calendar dateFromComponents:components];
NSLog(@"%@", date); // 2014-02-20 00:00:00 +0000
P.S. Btw I have GMT+3 time zone