New file |
| | |
| | | /************************************************************ |
| | | * * Hyphenate CONFIDENTIAL |
| | | * __________________ |
| | | * Copyright (C) 2016 Hyphenate Inc. All rights reserved. |
| | | * |
| | | * NOTICE: All information contained herein is, and remains |
| | | * the property of Hyphenate Inc. |
| | | * Dissemination of this information or reproduction of this material |
| | | * is strictly forbidden unless prior written permission is obtained |
| | | * from Hyphenate Inc. |
| | | */ |
| | | |
| | | #import "NSDate+Category.h" |
| | | #import "NSDateFormatter+Category.h" |
| | | #import "EaseLocalDefine.h" |
| | | |
| | | #define DATE_COMPONENTS (NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekOfYear | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal) |
| | | #define CURRENT_CALENDAR [NSCalendar currentCalendar] |
| | | |
| | | @implementation NSDate (Category) |
| | | |
| | | - (NSString *)timeIntervalDescription |
| | | { |
| | | NSTimeInterval timeInterval = -[self timeIntervalSinceNow]; |
| | | if (timeInterval < 60) { |
| | | return NSEaseLocalizedString(@"NSDateCategory.text1", @""); |
| | | } else if (timeInterval < 3600) { |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text2", @""), timeInterval / 60]; |
| | | } else if (timeInterval < 86400) { |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text3", @""), timeInterval / 3600]; |
| | | } else if (timeInterval < 2592000) {//within 30 days |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text4", @""), timeInterval / 86400]; |
| | | } else if (timeInterval < 31536000) {//30 days to a year |
| | | NSDateFormatter *dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text5", @"")]; |
| | | return [dateFormatter stringFromDate:self]; |
| | | } else { |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text6", @""), timeInterval / 31536000]; |
| | | } |
| | | } |
| | | |
| | | - (NSString *)minuteDescription |
| | | { |
| | | NSDateFormatter *dateFormatter = [NSDateFormatter dateFormatterWithFormat:@"yyyy-MM-dd"]; |
| | | |
| | | NSString *theDay = [dateFormatter stringFromDate:self]; |
| | | NSString *currentDay = [dateFormatter stringFromDate:[NSDate date]]; |
| | | if ([theDay isEqualToString:currentDay]) { |
| | | [dateFormatter setDateFormat:@"ah:mm"]; |
| | | return [dateFormatter stringFromDate:self]; |
| | | } else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] == 86400) {//one day ago |
| | | [dateFormatter setDateFormat:@"ah:mm"]; |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text7", @'"'), [dateFormatter stringFromDate:self]]; |
| | | } else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] < 86400 * 7) {//within a week |
| | | [dateFormatter setDateFormat:@"EEEE ah:mm"]; |
| | | return [dateFormatter stringFromDate:self]; |
| | | } else { |
| | | [dateFormatter setDateFormat:@"yyyy-MM-dd ah:mm"]; |
| | | return [dateFormatter stringFromDate:self]; |
| | | } |
| | | } |
| | | |
| | | -(NSString *)formattedTime{ |
| | | NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; |
| | | [formatter setDateFormat:@"YYYY-MM-dd"]; |
| | | NSString * dateNow = [formatter stringFromDate:[NSDate date]]; |
| | | NSDateComponents *components = [[NSDateComponents alloc] init]; |
| | | [components setDay:[[dateNow substringWithRange:NSMakeRange(8,2)] intValue]]; |
| | | [components setMonth:[[dateNow substringWithRange:NSMakeRange(5,2)] intValue]]; |
| | | [components setYear:[[dateNow substringWithRange:NSMakeRange(0,4)] intValue]]; |
| | | NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; |
| | | NSDate *date = [gregorian dateFromComponents:components]; |
| | | |
| | | NSInteger hour = [self hoursAfterDate:date]; |
| | | NSDateFormatter *dateFormatter = nil; |
| | | NSString *ret = @""; |
| | | |
| | | //If hasAMPM==TURE, use 12-hour clock, otherwise use 24-hour clock |
| | | NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]]; |
| | | NSRange containsA = [formatStringForHours rangeOfString:@"a"]; |
| | | BOOL hasAMPM = containsA.location != NSNotFound; |
| | | |
| | | if (!hasAMPM) { //24-hour clock |
| | | if (hour <= 24 && hour >= 0) { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:@"HH:mm"]; |
| | | }else if (hour < 0 && hour >= -24) { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text8", @"")]; |
| | | }else { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:@"yyyy-MM-dd HH:mm"]; |
| | | } |
| | | }else { |
| | | if (hour >= 0 && hour <= 6) { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text9", @"")]; |
| | | }else if (hour > 6 && hour <=11 ) { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text10", @"")]; |
| | | }else if (hour > 11 && hour <= 17) { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text11", @"")]; |
| | | }else if (hour > 17 && hour <= 24) { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text12", @"")]; |
| | | }else if (hour < 0 && hour >= -24){ |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:NSEaseLocalizedString(@"NSDateCategory.text13", @"")]; |
| | | }else { |
| | | dateFormatter = [NSDateFormatter dateFormatterWithFormat:@"yyyy-MM-dd HH:mm"]; |
| | | } |
| | | } |
| | | |
| | | ret = [dateFormatter stringFromDate:self]; |
| | | return ret; |
| | | } |
| | | |
| | | - (NSString *)formattedDateDescription |
| | | { |
| | | NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; |
| | | |
| | | [dateFormatter setDateFormat:@"yyyy-MM-dd"]; |
| | | NSString *theDay = [dateFormatter stringFromDate:self]; |
| | | NSString *currentDay = [dateFormatter stringFromDate:[NSDate date]]; |
| | | |
| | | NSInteger timeInterval = -[self timeIntervalSinceNow]; |
| | | if (timeInterval < 60) { |
| | | return NSEaseLocalizedString(@"NSDateCategory.text1", @""); |
| | | } else if (timeInterval < 3600) {//within an hour |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text2", @""), timeInterval / 60]; |
| | | } else if (timeInterval < 21600) {//within 6 hour |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text3", @""), timeInterval / 3600]; |
| | | } else if ([theDay isEqualToString:currentDay]) {//current day |
| | | [dateFormatter setDateFormat:@"HH:mm"]; |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text14", @""), [dateFormatter stringFromDate:self]]; |
| | | } else if ([[dateFormatter dateFromString:currentDay] timeIntervalSinceDate:[dateFormatter dateFromString:theDay]] == 86400) {//one day ago |
| | | [dateFormatter setDateFormat:@"HH:mm"]; |
| | | return [NSString stringWithFormat:NSEaseLocalizedString(@"NSDateCategory.text7", @""), [dateFormatter stringFromDate:self]]; |
| | | } else { |
| | | [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; |
| | | return [dateFormatter stringFromDate:self]; |
| | | } |
| | | } |
| | | |
| | | - (double)timeIntervalSince1970InMilliSecond { |
| | | double ret; |
| | | ret = [self timeIntervalSince1970] * 1000; |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | + (NSDate *)dateWithTimeIntervalInMilliSecondSince1970:(double)timeIntervalInMilliSecond { |
| | | NSDate *ret = nil; |
| | | double timeInterval = timeIntervalInMilliSecond; |
| | | // judge if the argument is in secconds(for former data structure). |
| | | if(timeIntervalInMilliSecond > 140000000000) { |
| | | timeInterval = timeIntervalInMilliSecond / 1000; |
| | | } |
| | | ret = [NSDate dateWithTimeIntervalSince1970:timeInterval]; |
| | | |
| | | return ret; |
| | | } |
| | | |
| | | + (NSString *)formattedTimeFromTimeInterval:(long long)time{ |
| | | return [[NSDate dateWithTimeIntervalInMilliSecondSince1970:time] formattedTime]; |
| | | } |
| | | |
| | | #pragma mark Relative Dates |
| | | |
| | | + (NSDate *) dateWithDaysFromNow: (NSInteger) days |
| | | { |
| | | // Thanks, Jim Morrison |
| | | return [[NSDate date] dateByAddingDays:days]; |
| | | } |
| | | |
| | | + (NSDate *) dateWithDaysBeforeNow: (NSInteger) days |
| | | { |
| | | // Thanks, Jim Morrison |
| | | return [[NSDate date] dateBySubtractingDays:days]; |
| | | } |
| | | |
| | | + (NSDate *) dateTomorrow |
| | | { |
| | | return [NSDate dateWithDaysFromNow:1]; |
| | | } |
| | | |
| | | + (NSDate *) dateYesterday |
| | | { |
| | | return [NSDate dateWithDaysBeforeNow:1]; |
| | | } |
| | | |
| | | + (NSDate *) dateWithHoursFromNow: (NSInteger) dHours |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_HOUR * dHours; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | + (NSDate *) dateWithHoursBeforeNow: (NSInteger) dHours |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_HOUR * dHours; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | + (NSDate *) dateWithMinutesFromNow: (NSInteger) dMinutes |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_MINUTE * dMinutes; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | + (NSDate *) dateWithMinutesBeforeNow: (NSInteger) dMinutes |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_MINUTE * dMinutes; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | #pragma mark Comparing Dates |
| | | |
| | | - (BOOL) isEqualToDateIgnoringTime: (NSDate *) aDate |
| | | { |
| | | NSDateComponents *components1 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | NSDateComponents *components2 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate]; |
| | | return ((components1.year == components2.year) && |
| | | (components1.month == components2.month) && |
| | | (components1.day == components2.day)); |
| | | } |
| | | |
| | | - (BOOL) isToday |
| | | { |
| | | return [self isEqualToDateIgnoringTime:[NSDate date]]; |
| | | } |
| | | |
| | | - (BOOL) isTomorrow |
| | | { |
| | | return [self isEqualToDateIgnoringTime:[NSDate dateTomorrow]]; |
| | | } |
| | | |
| | | - (BOOL) isYesterday |
| | | { |
| | | return [self isEqualToDateIgnoringTime:[NSDate dateYesterday]]; |
| | | } |
| | | |
| | | // This hard codes the assumption that a week is 7 days |
| | | - (BOOL) isSameWeekAsDate: (NSDate *) aDate |
| | | { |
| | | NSDateComponents *components1 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | NSDateComponents *components2 = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate]; |
| | | |
| | | // Must be same week. 12/31 and 1/1 will both be week "1" if they are in the same week |
| | | if (components1.weekOfYear != components2.weekOfYear) return NO; |
| | | |
| | | // Must have a time interval under 1 week. Thanks @aclark |
| | | return (fabs([self timeIntervalSinceDate:aDate]) < D_WEEK); |
| | | } |
| | | |
| | | - (BOOL) isThisWeek |
| | | { |
| | | return [self isSameWeekAsDate:[NSDate date]]; |
| | | } |
| | | |
| | | - (BOOL) isNextWeek |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_WEEK; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return [self isSameWeekAsDate:newDate]; |
| | | } |
| | | |
| | | - (BOOL) isLastWeek |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_WEEK; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return [self isSameWeekAsDate:newDate]; |
| | | } |
| | | |
| | | // Thanks, mspasov |
| | | - (BOOL) isSameMonthAsDate: (NSDate *) aDate |
| | | { |
| | | NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:self]; |
| | | NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:aDate]; |
| | | return ((components1.month == components2.month) && |
| | | (components1.year == components2.year)); |
| | | } |
| | | |
| | | - (BOOL) isThisMonth |
| | | { |
| | | return [self isSameMonthAsDate:[NSDate date]]; |
| | | } |
| | | |
| | | - (BOOL) isSameYearAsDate: (NSDate *) aDate |
| | | { |
| | | NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:self]; |
| | | NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:aDate]; |
| | | return (components1.year == components2.year); |
| | | } |
| | | |
| | | - (BOOL) isThisYear |
| | | { |
| | | // Thanks, baspellis |
| | | return [self isSameYearAsDate:[NSDate date]]; |
| | | } |
| | | |
| | | - (BOOL) isNextYear |
| | | { |
| | | NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:self]; |
| | | NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:[NSDate date]]; |
| | | |
| | | return (components1.year == (components2.year + 1)); |
| | | } |
| | | |
| | | - (BOOL) isLastYear |
| | | { |
| | | NSDateComponents *components1 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:self]; |
| | | NSDateComponents *components2 = [CURRENT_CALENDAR components:NSCalendarUnitYear fromDate:[NSDate date]]; |
| | | |
| | | return (components1.year == (components2.year - 1)); |
| | | } |
| | | |
| | | - (BOOL) isEarlierThanDate: (NSDate *) aDate |
| | | { |
| | | return ([self compare:aDate] == NSOrderedAscending); |
| | | } |
| | | |
| | | - (BOOL) isLaterThanDate: (NSDate *) aDate |
| | | { |
| | | return ([self compare:aDate] == NSOrderedDescending); |
| | | } |
| | | |
| | | // Thanks, markrickert |
| | | - (BOOL) isInFuture |
| | | { |
| | | return ([self isLaterThanDate:[NSDate date]]); |
| | | } |
| | | |
| | | // Thanks, markrickert |
| | | - (BOOL) isInPast |
| | | { |
| | | return ([self isEarlierThanDate:[NSDate date]]); |
| | | } |
| | | |
| | | |
| | | #pragma mark Roles |
| | | - (BOOL) isTypicallyWeekend |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:NSCalendarUnitWeekday fromDate:self]; |
| | | if ((components.weekday == 1) || |
| | | (components.weekday == 7)) |
| | | return YES; |
| | | return NO; |
| | | } |
| | | |
| | | - (BOOL) isTypicallyWorkday |
| | | { |
| | | return ![self isTypicallyWeekend]; |
| | | } |
| | | |
| | | #pragma mark Adjusting Dates |
| | | |
| | | - (NSDate *) dateByAddingDays: (NSInteger) dDays |
| | | { |
| | | NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_DAY * dDays; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | - (NSDate *) dateBySubtractingDays: (NSInteger) dDays |
| | | { |
| | | return [self dateByAddingDays: (dDays * -1)]; |
| | | } |
| | | |
| | | - (NSDate *) dateByAddingHours: (NSInteger) dHours |
| | | { |
| | | NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_HOUR * dHours; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | - (NSDate *) dateBySubtractingHours: (NSInteger) dHours |
| | | { |
| | | return [self dateByAddingHours: (dHours * -1)]; |
| | | } |
| | | |
| | | - (NSDate *) dateByAddingMinutes: (NSInteger) dMinutes |
| | | { |
| | | NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_MINUTE * dMinutes; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | return newDate; |
| | | } |
| | | |
| | | - (NSDate *) dateBySubtractingMinutes: (NSInteger) dMinutes |
| | | { |
| | | return [self dateByAddingMinutes: (dMinutes * -1)]; |
| | | } |
| | | |
| | | - (NSDate *) dateAtStartOfDay |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | components.hour = 0; |
| | | components.minute = 0; |
| | | components.second = 0; |
| | | return [CURRENT_CALENDAR dateFromComponents:components]; |
| | | } |
| | | |
| | | - (NSDateComponents *) componentsWithOffsetFromDate: (NSDate *) aDate |
| | | { |
| | | NSDateComponents *dTime = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:aDate toDate:self options:0]; |
| | | return dTime; |
| | | } |
| | | |
| | | #pragma mark Retrieving Intervals |
| | | |
| | | - (NSInteger) minutesAfterDate: (NSDate *) aDate |
| | | { |
| | | NSTimeInterval ti = [self timeIntervalSinceDate:aDate]; |
| | | return (NSInteger) (ti / D_MINUTE); |
| | | } |
| | | |
| | | - (NSInteger) minutesBeforeDate: (NSDate *) aDate |
| | | { |
| | | NSTimeInterval ti = [aDate timeIntervalSinceDate:self]; |
| | | return (NSInteger) (ti / D_MINUTE); |
| | | } |
| | | |
| | | - (NSInteger) hoursAfterDate: (NSDate *) aDate |
| | | { |
| | | NSTimeInterval ti = [self timeIntervalSinceDate:aDate]; |
| | | return (NSInteger) (ti / D_HOUR); |
| | | } |
| | | |
| | | - (NSInteger) hoursBeforeDate: (NSDate *) aDate |
| | | { |
| | | NSTimeInterval ti = [aDate timeIntervalSinceDate:self]; |
| | | return (NSInteger) (ti / D_HOUR); |
| | | } |
| | | |
| | | - (NSInteger) daysAfterDate: (NSDate *) aDate |
| | | { |
| | | NSTimeInterval ti = [self timeIntervalSinceDate:aDate]; |
| | | return (NSInteger) (ti / D_DAY); |
| | | } |
| | | |
| | | - (NSInteger) daysBeforeDate: (NSDate *) aDate |
| | | { |
| | | NSTimeInterval ti = [aDate timeIntervalSinceDate:self]; |
| | | return (NSInteger) (ti / D_DAY); |
| | | } |
| | | |
| | | // Thanks, dmitrydims |
| | | // I have not yet thoroughly tested this |
| | | - (NSInteger)distanceInDaysToDate:(NSDate *)anotherDate |
| | | { |
| | | NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; |
| | | NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay fromDate:self toDate:anotherDate options:0]; |
| | | return components.day; |
| | | } |
| | | |
| | | #pragma mark Decomposing Dates |
| | | |
| | | - (NSInteger) nearestHour |
| | | { |
| | | NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_MINUTE * 30; |
| | | NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval]; |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:NSCalendarUnitHour fromDate:newDate]; |
| | | return components.hour; |
| | | } |
| | | |
| | | - (NSInteger) hour |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.hour; |
| | | } |
| | | |
| | | - (NSInteger) minute |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.minute; |
| | | } |
| | | |
| | | - (NSInteger) seconds |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.second; |
| | | } |
| | | |
| | | - (NSInteger) day |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.day; |
| | | } |
| | | |
| | | - (NSInteger) month |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.month; |
| | | } |
| | | |
| | | - (NSInteger) week |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.weekOfYear; |
| | | } |
| | | |
| | | - (NSInteger) weekday |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.weekday; |
| | | } |
| | | |
| | | - (NSInteger) nthWeekday // e.g. 2nd Tuesday of the month is 2 |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.weekdayOrdinal; |
| | | } |
| | | |
| | | - (NSInteger) year |
| | | { |
| | | NSDateComponents *components = [CURRENT_CALENDAR components:DATE_COMPONENTS fromDate:self]; |
| | | return components.year; |
| | | } |
| | | |
| | | @end |