关于NSDate的比较方便的方法收集以后还会继续更新

/**
 *  获得当前系统时间
 *
 *  默认为yyyy-MM-dd HH:mm:ss格式
 */
+ (NSDate *)getCurrentSystemDate {
    NSDate *senddate = [NSDate date];
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
    [dateformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *locationString=[dateformatter stringFromDate:senddate];
    return [dateformatter dateFromString:locationString];
}
/**
 *  获得某个时间上加day天
 */
- (NSDate *)getDateByAddDay:(NSInteger)day {
    NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
    dayComponent.day = day;
    NSCalendar *theCalendar = [NSCalendar currentCalendar];
    return [theCalendar dateByAddingComponents:dayComponent toDate:self options:0];
}
/**
 *  获得某个时间这个星期的第一天
 *
 *  @param weekStartIndex 以星期几开始为第一天
 */
- (NSDate *)getWeekStartDateWithStartIndex:(NSInteger)weekStartIndex {
    NSUInteger weekDay = [[self getWeekNumber] integerValue];
    NSInteger gap = (weekStartIndex <= weekDay) ?  weekDay  : ( 7 + weekDay );
    NSInteger day = weekStartIndex - gap;
    return [self getDateByAddDay:day];
}
/**
 *  获得某个时间是星期几
 *
 *  @return 星期几
 */
- (NSNumber *)getWeekNumber {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components:NSWeekdayCalendarUnit fromDate:self];
    return [NSNumber numberWithInteger:([comps weekday] - 1)];
}
/**
 *  获得某个时间是周几
 *
 *  @return 格式:(周日、周一)
 */
-(NSString *)getWeekString {
    static NSDateFormatter *weekFormatter;
    if(!weekFormatter){
        weekFormatter = [[NSDateFormatter alloc] init];
        NSLocale *en_AU_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
        [weekFormatter setLocale:en_AU_POSIX];
        [weekFormatter setDateFormat:@"E"];
    }
    NSString *temp = [weekFormatter stringFromDate:self];
    NSString *newWeek = nil;
    if ([temp containsString:@"周"]) {
        newWeek = [temp stringByReplacingOccurrencesOfString:@"周" withString:@""];
    }else {
        newWeek = temp;
    }
    return newWeek;
}
/**
 *  获取月和日
 *
 *  @return 格式:12月8
 */
- (NSString *)getMonthAndDayString {
    static NSDateFormatter *dateFormatter;
    if(!dateFormatter){
        dateFormatter = [[NSDateFormatter alloc] init];
        NSLocale* en_AU_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
        [dateFormatter setLocale:en_AU_POSIX];
        [dateFormatter setDateFormat:@"M月d"];
    }
    return [dateFormatter stringFromDate:self];
}
/**
 *  暂时不知道什么意思
 *
 *  @return 返回年月日
 */
- (NSDate *)midnightDate {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSDateComponents *components = [calendar components:unitFlags fromDate:self];
    return [calendar dateFromComponents:components];
}
/**
 *  判断两个时间是否相等
 *
 *  @return YES/NO
 */
- (BOOL)isSameWithDate:(NSDate *)date{
    NSDate *date1 = [self midnightDate];
    NSDate *date2 = [date midnightDate];
    BOOL isSame = [date1 isEqualToDate:date2];
    return isSame;
}
/**
 *  判断某个时间小于当前时间或小于等于当前时间
 *
 *  @param flag flag(YES:小于当前时间/NO:小于等于当前时间)
 *
 *  @return YES/NO
 */
- (BOOL)isLessOrEqualToDayByBOOL:(BOOL)flag {
    NSDate *nowDate = [NSDate getCurrentSystemDate];
    if (!flag) {
        //返回当前时间一天后的时间
        nowDate = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60];
    }
    //earlierDate:获取较早的日期
    if([[nowDate earlierDate:self] isEqualToDate:self]) {
        return YES;
    } else {
        return NO;
    }
}
/**
 *  判断某个时间大于当前时间或大于等于当前时间
 *
 *  @param flag flag(YES:大于当前时间/NO:大于等于当前时间)
 *
 *  @return YES/NO
 */
- (BOOL)isGreaterOrEqualByBOOL:(BOOL)flag{
    NSDate *nowDate = [NSDate getCurrentSystemDate];
    if (!flag) {
        nowDate = [NSDate dateWithTimeIntervalSinceNow: - 24 * 60 * 60];
    }
    //laterDate:获取较晚的日期
    if([[nowDate laterDate:self] isEqualToDate:self]) {
        return YES;
    } else {
        return NO;
    }
}
/**
 *  判断某个时间大于当前时间加上day天得时间或大于等于当前时间加上day天得时间
 *
 *  @param day 当前时间加上day天
 *
 *  @param flag flag(YES:大于当前时间加上day天得时间/NO:大于等于当前时间加上day天得时间)
 *
 *  @return YES/NO
 */
- (BOOL)isGreaterOrEqualByDay:(NSUInteger)day withBool:(BOOL)flag {
    NSDate *nowDate = [NSDate getCurrentSystemDate];
    nowDate = [nowDate getDateByAddDay:day];
    if (!flag) {
        nowDate = [NSDate dateWithTimeIntervalSinceNow: - 24 * 60 * 60];
    }
    //laterDate:获取较晚的日期
    if([[nowDate laterDate:self] isEqualToDate:self]) {
        return YES;
    } else {
        return NO;
    }
}
/**
 *  判断某个时间是否在某个时间段
 *
 *  @param earlierDate 较早的时间
 *  @param laterDate   较晚的时间
 *
 *  @return YES/NO
 */
- (BOOL)isInTimeSlot:(NSDate *)earlierDate toDate:(NSDate *)laterDate {
    NSTimeInterval timeInterval = [[self midnightDate] timeIntervalSince1970];
    NSTimeInterval earlierTimeInterval = [[earlierDate midnightDate] timeIntervalSince1970];
    NSTimeInterval laterimeInterval = [[laterDate midnightDate] timeIntervalSince1970];
    BOOL isWithinDate = (timeInterval >= earlierTimeInterval && timeInterval <= laterimeInterval);
    return isWithinDate;
}

/**
 *  获取对象的字符串类型
 */
+ (NSString *)stringForId:(id)object {
    NSString *str = (NSString *)object;
    if (str == nil) return @"";
    if (str == NULL) return @"";
    if ([str isKindOfClass:[NSNull class]]) return @"";
    str = [NSString stringWithFormat:@"%@",str];
    return str;
}

/**
 *  时间戳转换为NSDate
 */
+ (NSDate *)getDateForTimeIntervalString:(NSString *)interval {
    interval = [self stringForId:interval];  // 强转字符串
    if (interval.length == 13) {            // Jave类型时间戳
        NSTimeInterval timeInterval = [interval doubleValue] / 1000;
        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
        return date;
    } else if (interval.length == 10) {       // PHP类型时间戳
        NSTimeInterval timeInterval = [interval doubleValue];
        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
        return date;
    } else {
        NSTimeInterval timeInterval = [interval doubleValue];
        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
        return date;
    }
    return nil;
}

/**
 *  Date转"时间戳"字符串(0.PHP类型-10位 1.Jave-13位)
 */
+ (NSString *)getTimeIntervalForDate:(NSDate *)date byType:(NSInteger)type {
    NSTimeInterval time;
    if (type == 1) {
        time = [date timeIntervalSince1970] * 1000;
    }else {
        time = [date timeIntervalSince1970];
    }
    NSString *returnTime = [NSString stringWithFormat:@"%f",time];
    if (returnTime.length > 13) {
        returnTime = [returnTime substringToIndex:13];
    }
    return returnTime;
}

/**
 *  Date 转换 NSString
 *  (自定义 默认格式:@"yyyy-MM-dd HH:mm:ss")
 */
+ (NSString *)getStringForDate:(NSDate *)date format:(NSString *)format {
    if (format == nil) format = @"yyyy-MM-dd HH:mm:ss";
    
    // 实例化一个NSDateFormatter对象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    
    // 设定时间格式,这里可以设置成自己需要的格式
    [dateFormatter setDateFormat:format];
    
    // 用[NSDate date]可以获取系统当前时间
    NSString *currentDateStr = [dateFormatter stringFromDate:date];
    return currentDateStr;
}

/**
 *  火星时间转地球时间
 *
 *  @param string
 *
 *  @return 月.日
 */
+ (NSString *)getTimeMD:(NSString *)string{
    if (![string isEqualToString:@""]) {
        NSDate *date =[NSDate dateWithTimeIntervalSince1970:[string doubleValue]/1000];
        //1.创建时间格式器
        NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
        //2.设置格式器的格式
        //注意格式的设置:yyyy代表年  MM代表月  dd代表日  hh代表12小时的小时(HH代表24小时)   mm代表分  ss代表秒
        //        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
        [dateFormatter setDateFormat:@"M.dd"];
        NSString* dateString = [dateFormatter stringFromDate:date];
        return dateString;
    }else{
        return @"";
    }
    return @"";
}

+ (NSString *)getTimeYMD:(NSString *)string
{
    if (![string isEqualToString:@""]) {
        NSDate *date =[NSDate dateWithTimeIntervalSince1970:[string doubleValue]/1000];
        //1.创建时间格式器
        NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
        //2.设置格式器的格式
        //注意格式的设置:yyyy代表年  MM代表月  dd代表日  hh代表12小时的小时(HH代表24小时)   mm代表分  ss代表秒
        //        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSString* dateString = [dateFormatter stringFromDate:date];
        return dateString;
    }else{
        return @"";
    }
    return @"";

}

+ (NSDateComponents *)getDateComponentsWithDate:(NSDate *)date {
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *component = [[NSDateComponents alloc] init];
    NSInteger unitFlags = NSYearCalendarUnit |
    NSMonthCalendarUnit |
    NSDayCalendarUnit |
    NSWeekdayCalendarUnit |
    NSHourCalendarUnit |
    NSMinuteCalendarUnit |
    NSSecondCalendarUnit;
    component = [calendar components:unitFlags fromDate:date];
    return component;
}

+ (NSString *)getTimeyMdHm:(NSString *)string
{
    if (![string isEqualToString:@""]) {
        NSDate *date =[NSDate dateWithTimeIntervalSince1970:[string doubleValue]/1000];
        //1.创建时间格式器
        NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
        //2.设置格式器的格式
        //注意格式的设置:yyyy代表年  MM代表月  dd代表日  hh代表12小时的小时(HH代表24小时)   mm代表分  ss代表秒
        //        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
        NSString* dateString = [dateFormatter stringFromDate:date];
        return dateString;
    }else{
        return @"";
    }
    return @"";
    
}


/** 获取当前时间的“时间戳” -- 默认13位 */
+ (NSString *)getTimeIntervalStringByNew {
    NSDate *date = [NSDate date];
    NSString *returnTime = [self getTimeIntervalForDate:date byType:1];
    return returnTime;
}

/**
 *  时间戳 直接转成 NSString (自定义 默认格式:@"yyyy-MM-dd HH:mm:ss")
 */
+ (NSString *)getStringForTimeIntervalString:(NSString *)interval format:(NSString *)format {
    NSDate *date = [self getDateForTimeIntervalString:interval];
    return [self getStringForDate:date format:format];
}

/**
 *  NSString 转换 Date(自定义 默认格式:@"yyyy-MM-dd HH:mm:ss")
 */
+ (NSDate *)getDateForString:(NSString *)string format:(NSString *)format {
    if (format == nil) format = @"yyyy-MM-dd HH:mm:ss";
    //实例化一个NSDateFormatter对象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //设定时间格式,这里可以设置成自己需要的格式
    [dateFormatter setDateFormat:format];
    return [dateFormatter dateFromString:string];
}

/**
 * 获取两个时间的时间差,返回秒数
 */
+ (NSInteger)getTimeDifferenceForDate:(NSDate *)date1 reduce:(NSDate *)date2 {
    NSTimeInterval interval1 = [date1 timeIntervalSinceNow];
    NSTimeInterval interval2 = [date2 timeIntervalSinceNow];
    return fabs(interval1 - interval2);
}

/**
 *  获得与当前时间的时间差
 */
+ (NSInteger)getTimeDifferenceCurrDateForDate:(NSDate *)date {
    NSDate *curDate = [NSDate getCurrentSystemDate];
    return [self getTimeDifferenceForDate:curDate reduce:date];
}

/**
 *  根据秒数获得相应的描述
 */
+ (NSString *)getDescribeForTimeInterval:(NSInteger)interval {
    NSString *describeStr = @"";
    if (interval < 60) {
        describeStr = [NSString stringWithFormat:@"%zd秒", interval];
    }else if (interval / 60 < 60) {
        describeStr = [NSString stringWithFormat:@"%zd分钟", interval / 60];
    }else if (interval / (60 * 60) < 24) {
        describeStr = [NSString stringWithFormat:@"%zd小时", interval / (60 * 60)];
    }else {
        describeStr = [NSString stringWithFormat:@"%zd天", interval / (60 * 60 * 24)];
    }
    return describeStr;
}


+ (NSString *)getTimeMonthWithType:(NSString *)type andInterval:(NSString *)interval{
    
    NSString *monthStr = [self getStringForTimeIntervalString:interval format:@"MM"];
    if (1 == [type integerValue]) {
        return [NSString stringWithFormat:@"%zd",[monthStr integerValue]];
    }
    
    NSString *currentMonth = [self getStringForDate:[NSDate date] format:@"MM"];
    if ([currentMonth isEqualToString:monthStr]) {
        return @"本";
    }
    
    switch ([monthStr integerValue]) {
        case 1:
            return @"一";
            break;
        case 2:
            return @"二";
            break;
        case 3:
            return @"三";
            break;
        case 4:
            return @"四";
            break;
        case 5:
            return @"五";
            break;
        case 6:
            return @"六";
            break;
        case 7:
            return @"七";
            break;
        case 8:
            return @"八";
            break;
        case 9:
            return @"九";
            break;
        case 10:
            return @"十";
            break;
        case 11:
            return @"十一";
            break;
        case 12:
            return @"十二";
            break;
        default:
            break;
    }
    
    return nil;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值