2016-04-01 21 views
0

私のアプリには、ユーザーがカスタマーサービス担当者と直接話すチャットコンポーネントがあり、就業時間中にヘルプをリクエストしているかどうかを確認したい。ローカルNSDate時間とPST時間の営業時間を比較する

勤務時間は、午前9時から午後7時までです。

ここは、オフィスが閉鎖されていても正しく動作していない場合に通知を表示するための私の現在のコードです。あなたが気にすべてが、それは午前9時と午後7時PSTの間、現在のかどうかである場合

- (void)checkOfficeHours { 

//set opening hours date 
NSDateComponents *openingTime = [[NSDateComponents alloc] init]; 
openingTime.hour = 9; 
openingTime.minute = 0; 

//set closing time hours 
NSDateComponents *closingTime = [[NSDateComponents alloc] init]; 
closingTime.hour = 19; 
closingTime.minute = 0; 

//get the pst time from local time 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[email protected]"hh:mm"; 
NSDate *currentDate = [NSDate date]; 
NSTimeZone *pstTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"PST"]; 
dateFormatter.timeZone = pstTimeZone; 
NSString *pstTimeString = [dateFormatter stringFromDate:currentDate]; 

//convert pst date string back to date 
NSDate *now = [dateFormatter dateFromString:pstTimeString]; 

//create the current date component 
NSDateComponents *currentTime = [[NSCalendar currentCalendar] components:NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond fromDate:now]; 

//sort the array by times 
NSMutableArray *times = [@[openingTime, closingTime, currentTime] mutableCopy]; 
[times sortUsingComparator:^NSComparisonResult(NSDateComponents *t1, NSDateComponents *t2) { 
    if (t1.hour > t2.hour) { 
     return NSOrderedDescending; 
    } 

    if (t1.hour < t2.hour) { 
     return NSOrderedAscending; 
    } 
    // hour is the same 
    if (t1.minute > t2.minute) { 
     return NSOrderedDescending; 
    } 

    if (t1.minute < t2.minute) { 
     return NSOrderedAscending; 
    } 
    // hour and minute are the same 
    if (t1.second > t2.second) { 
     return NSOrderedDescending; 
    } 

    if (t1.second < t2.second) { 
     return NSOrderedAscending; 
    } 
    return NSOrderedSame; 

}]; 

//if the current time is in between (index == 1) then its during office hours 
if ([times indexOfObject:currentTime] == 1) { 
    NSLog(@"We are Open!"); 
    self.officeHoursView.hidden = YES; 
} else { 
    NSLog(@"Sorry, we are closed!"); 
    self.officeHoursView.hidden = NO; 
} 

}

答えて

1

は、あなたは多くのより簡単にそれよりもそれを行うことができます。現在の時刻のPSTでNSDateComponentsを取得し、結果のhourプロパティを確認してください。あなたはまた、週または他の詳細の一日を気にしている場合

NSTimeZone *pst = [NSTimeZone timeZoneWithName:@"PST"]; 
NSDateComponents *pstComponentsForNow = [[NSCalendar currentCalendar] componentsInTimeZone:pst fromDate:[NSDate date]]; 

if ((pstComponentsForNow.hour >= 9) && (pstComponentsForNow.hour <= 19)) { 
    NSLog(@"Open"); 
} else { 
    NSLog(@"Closed"); 
} 

NSDateComponentsの他のプロパティを見てください。

+0

ありがとうございます!これは仕事をするようだ! –

関連する問題