判斷當(dāng)前時(shí)間是否在工作時(shí)間范圍內(nèi)

好久沒寫博客了浴捆,主要是最近項(xiàng)目上線蒜田,時(shí)間實(shí)在太緊,到今天為止选泻,稍微有一點(diǎn)時(shí)間冲粤,好吧,廢話還是不多說了页眯,下面進(jìn)入正題:

我們來假設(shè)一個(gè)需求梯捕,當(dāng)然其實(shí)這個(gè)需求就是我們項(xiàng)目的需求,判斷當(dāng)前的時(shí)間是否是在工作范圍內(nèi) 如 早上8點(diǎn)到晚上8點(diǎn)窝撵,可能實(shí)現(xiàn)這個(gè)需求的辦法有挺多傀顾,下面我就介紹兩種方式吧,希望能幫到剛好有這個(gè)需求的苦逼程序員(一臉程序猿臉-):

方法一:
#pragma  mark -  判斷時(shí)間是否工作時(shí)間
#pragma  mark -
/**
 * @brief 判斷當(dāng)前時(shí)間是否在fromHour和toHour之間碌奉。如短曾,fromHour=8,toHour=23時(shí)赐劣,即為判斷當(dāng)前時(shí)間是否在8:00-23:00之間
 */
- (BOOL)isBetweenFromHour:(NSInteger)fromHour toHour:(NSInteger)toHour
{
    NSDate *dateFrom = [self getCustomDateWithHour:fromHour];
    NSDate *dateTo = [self getCustomDateWithHour:toHour];
    
    NSDate *currentDate = [NSDate date];
    
    if ([currentDate compare:dateFrom]==NSOrderedDescending && [currentDate compare:dateTo]==NSOrderedAscending)
    {
        DLog(@"該時(shí)間在 %ld:00-%ld:00 之間嫉拐!", fromHour, toHour);
        return YES;
    }
    return NO;
}

/**
 * @brief 生成當(dāng)天的某個(gè)點(diǎn)(返回的是倫敦時(shí)間,可直接與當(dāng)前時(shí)間[NSDate date]比較)
 * @param hour 如hour為“8”魁兼,就是上午8:00(本地時(shí)間)
 */
- (NSDate *)getCustomDateWithHour:(NSInteger)hour
{
    //獲取當(dāng)前時(shí)間
    NSDate *currentDate = [NSDate date];
    NSCalendar *currentCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *currentComps = [[NSDateComponents alloc] init];
    
    NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    
    currentComps = [currentCalendar components:unitFlags fromDate:currentDate];
    
    //設(shè)置當(dāng)天的某個(gè)點(diǎn)
    NSDateComponents *resultComps = [[NSDateComponents alloc] init];
    [resultComps setYear:[currentComps year]];
    [resultComps setMonth:[currentComps month]];
    [resultComps setDay:[currentComps day]];
    [resultComps setHour:hour];
    
    NSCalendar *resultCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    return [resultCalendar dateFromComponents:resultComps];
}

好了婉徘,方法1代碼就這么說,這個(gè)方法可能理解起來并不是那么容易咐汞,其實(shí)簡(jiǎn)單的理解就是將起始點(diǎn)和終點(diǎn)都生成當(dāng)天的一個(gè)點(diǎn)盖呼,再判斷當(dāng)前時(shí)間是否在這個(gè)時(shí)間段內(nèi)。當(dāng)然不理解這個(gè)方法也沒關(guān)系碉考,下面的方法比較好理解,牛逼的方法肯定是留在后面的嘛...

方法二:

說完方法一挺身,可以繼續(xù)來談我們的方法二了侯谁,先說說思路,將開始時(shí)間、結(jié)束時(shí)間、當(dāng)前時(shí)間都換算到1970時(shí)的時(shí)間墙贱,因?yàn)橄到y(tǒng)提供了一個(gè)方法

timeIntervalSince1970

這樣的話热芹,我們就可以通過判斷當(dāng)前的時(shí)間是否在這個(gè)時(shí)間段內(nèi)就可以了,思路其實(shí)和一差不多但是由于方法一使用了NSCalendar NSDateComponents等我們很少用的類所以可能理解起來復(fù)雜一點(diǎn)惨撇,下面看代碼吧:

/**
 判斷是否在工作時(shí)間內(nèi)
 
 @param fromdate 開始時(shí)間
 @param toDate 結(jié)束時(shí)間
 @return 判斷結(jié)果
 */
-(BOOL)inWorkPeriodFromDate:(NSString *)fromdate toDate:(NSString *)toDate {
    
    NSString *dateStr = [self obtainCurrentTimeWithFormatter:@"yyyy-MM-dd"];
    NSString *from = [NSString stringWithFormat:@"%@ %@",dateStr,fromdate];
    NSString *to = [NSString stringWithFormat:@"%@ %@",dateStr,toDate];
    
    NSTimeInterval fromTime = [[self transfromDateFromString:from inFormatter:@"yyyy-MM-dd HH:mm"] timeIntervalSince1970];
    NSTimeInterval toTime = [[self transfromDateFromString:to inFormatter:@"yyyy-MM-dd HH:mm"] timeIntervalSince1970];
    
    NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970];
    
    if (currentTime >fromTime && currentTime < toTime) {
        return YES;
    }else {
        return NO;
    }
}

//獲取當(dāng)前字符串形式的時(shí)間
-(NSString *)obtainCurrentTimeWithFormatter:(NSString *)formatter {
    
    NSDate *currentDate = [NSDate date];
    [_dateFormatter setDateFormat:formatter];
    NSString *dataStr = [_dateFormatter stringFromDate:currentDate];
    return dataStr;
}



/**
 日期字符串轉(zhuǎn) 日期
 
 @param dateStr 日期字符串
 @param formatter 時(shí)間個(gè) 格式
 */
-(NSDate *)transfromDateFromString:(NSString *)dateStr inFormatter:(NSString *) formatter {
    [_dateFormatter setDateFormat:formatter];
    NSDate *date = [_dateFormatter dateFromString:dateStr];
    return date;
}

今天就到這吧伊脓,這兩個(gè)方法我都測(cè)試過沒有問題的,有需要的直接拿去使用吧魁衙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末报腔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剖淀,更是在濱河造成了極大的恐慌纯蛾,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纵隔,死亡現(xiàn)場(chǎng)離奇詭異翻诉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)捌刮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門碰煌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绅作,你說我怎么就攤上這事芦圾。” “怎么了棚蓄?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵堕扶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我梭依,道長(zhǎng)稍算,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任役拴,我火速辦了婚禮糊探,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘河闰。我一直安慰自己科平,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布姜性。 她就那樣靜靜地躺著瞪慧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪部念。 梳的紋絲不亂的頭發(fā)上弃酌,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天氨菇,我揣著相機(jī)與錄音,去河邊找鬼妓湘。 笑死查蓉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榜贴。 我是一名探鬼主播豌研,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼唬党!你這毒婦竟也來了鹃共?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤初嘹,失蹤者是張志新(化名)和其女友劉穎及汉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屯烦,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坷随,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驻龟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温眉。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翁狐,靈堂內(nèi)的尸體忽然破棺而出类溢,到底是詐尸還是另有隱情,我是刑警寧澤露懒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布闯冷,位于F島的核電站,受9級(jí)特大地震影響懈词,放射性物質(zhì)發(fā)生泄漏蛇耀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一坎弯、第九天 我趴在偏房一處隱蔽的房頂上張望纺涤。 院中可真熱鬧,春花似錦抠忘、人聲如沸撩炊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拧咳。三九已至,卻和暖如春囚灼,著一層夾襖步出監(jiān)牢的瞬間骆膝,已是汗流浹背砾淌。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谭网,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓赃春,卻偏偏與公主長(zhǎng)得像愉择,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子织中,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容