LoginSignup
2
1

More than 3 years have passed since last update.

[Objective-C] 日付を比較する

Last updated at Posted at 2015-12-09

指定した期間内にアクセスすると1度だけダイアログを出すプログラムを作ってみた

こんな感じで

EventDateRecorder.h
#import <Foundation/Foundation.h>
@interface EventDateRecorder : NSObject
+ (BOOL)christmasEventDateRecorder;
@end
EventDateRecorder.m
#import "EventDateRecorder.h"

// ダイアログ表示期間
static NSString *const chrismasEventDateKey = @"chrismasEventDate";
static NSString *const chrismasfromDateString = @"2015-12-25 00:00:00";
static NSString *const chrismasAfterDateString = @"2015-12-26 00:00:00";

@implementation EventDateRecorder

+ (BOOL)chrismasEventDateRecorder
{
   BOOL isChrismasEvent = [self eventDateRecorderWithKey:chrismasEventDateKey fromDateString:chrismasfromDateString afterDateString:chrismasAfterDateString];
    return isChrismasEvent;
}

+ (BOOL)eventDateRecorderWithKey:(NSString *)eventKey fromDateString:(NSString *)fromDateString afterDateString:(NSString *)afterDateString
{
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSDate *fromDate = [formatter dateFromString:fromDateString];
    NSDate *afterDate = [formatter dateFromString:afterDateString];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDate *eventDate = [defaults objectForKey:eventKey];
    NSDate *now = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone systemTimeZone] secondsFromGMT]];
    if ([now compare:fromDate] == NSOrderedDescending && [now compare:afterDate] == NSOrderedAscending) {
        if (eventDate) {
            if([eventDate compare:fromDate] == NSOrderedDescending && [eventDate compare:afterDate] == NSOrderedAscending) {
                return NO;
            } else {
                [defaults setObject:now forKey:eventKey];
                [defaults synchronize];
                return YES;
            }
        } else {
            [defaults setObject:now forKey:eventKey];
            [defaults synchronize];
            return YES;
        }
    } else {
        return NO;
    }
}
@end

使い方は

BOOL isChrismasEvent = [EventDateRecorder chrismasEventDateRecorder];
if (isChrismasEvent) {
//YESが返ってきた時の処理;
} else {
}

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1