You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.8 KiB
146 lines
5.8 KiB
1 year ago
|
//
|
||
|
// NSDate+convenience.m
|
||
|
//
|
||
|
// Created by in 't Veen Tjeerd on 4/23/12.
|
||
|
// Copyright (c) 2012 Vurig Media. All rights reserved.
|
||
|
//
|
||
|
|
||
|
#import "NSDate+convenience.h"
|
||
|
|
||
|
@implementation NSDate (Convenience)
|
||
|
|
||
|
-(int)year {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
NSDateComponents *components = [gregorian components:NSYearCalendarUnit fromDate:self];
|
||
|
return [components year];
|
||
|
}
|
||
|
|
||
|
|
||
|
-(int)month {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
NSDateComponents *components = [gregorian components:NSMonthCalendarUnit fromDate:self];
|
||
|
return [components month];
|
||
|
}
|
||
|
|
||
|
-(int)day {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
NSDateComponents *components = [gregorian components:NSDayCalendarUnit fromDate:self];
|
||
|
return [components day];
|
||
|
}
|
||
|
|
||
|
-(int)firstWeekDayInMonth {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
[gregorian setFirstWeekday:2]; //monday is first day
|
||
|
//[gregorian setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]];
|
||
|
|
||
|
//Set date to first of month
|
||
|
NSDateComponents *comps = [gregorian components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:self];
|
||
|
[comps setDay:1];
|
||
|
NSDate *newDate = [gregorian dateFromComponents:comps];
|
||
|
|
||
|
return [gregorian ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:newDate];
|
||
|
}
|
||
|
|
||
|
-(NSDate *)offsetMonth:(int)numMonths {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
[gregorian setFirstWeekday:2]; //monday is first day
|
||
|
|
||
|
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
|
||
|
[offsetComponents setMonth:numMonths];
|
||
|
//[offsetComponents setHour:1];
|
||
|
//[offsetComponents setMinute:30];
|
||
|
return [gregorian dateByAddingComponents:offsetComponents
|
||
|
toDate:self options:0];
|
||
|
}
|
||
|
|
||
|
-(NSDate *)offsetHours:(int)hours {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
[gregorian setFirstWeekday:2]; //monday is first day
|
||
|
|
||
|
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
|
||
|
//[offsetComponents setMonth:numMonths];
|
||
|
[offsetComponents setHour:hours];
|
||
|
return [gregorian dateByAddingComponents:offsetComponents
|
||
|
toDate:self options:0];
|
||
|
}
|
||
|
|
||
|
-(NSDate *)offsetDay:(int)numDays {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
[gregorian setFirstWeekday:2]; //monday is first day
|
||
|
|
||
|
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
|
||
|
[offsetComponents setDay:numDays];
|
||
|
//[offsetComponents setHour:1];
|
||
|
//[offsetComponents setMinute:30];
|
||
|
|
||
|
return [gregorian dateByAddingComponents:offsetComponents
|
||
|
toDate:self options:0];
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
-(int)numDaysInMonth {
|
||
|
NSCalendar *cal = [NSCalendar currentCalendar];
|
||
|
NSRange rng = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:self];
|
||
|
NSUInteger numberOfDaysInMonth = rng.length;
|
||
|
return numberOfDaysInMonth;
|
||
|
}
|
||
|
|
||
|
+(NSDate *)dateStartOfDay:(NSDate *)date {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
|
||
|
NSDateComponents *components =
|
||
|
[gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit |
|
||
|
NSDayCalendarUnit) fromDate: date];
|
||
|
return [gregorian dateFromComponents:components];
|
||
|
}
|
||
|
|
||
|
+(NSDate *)dateStartOfWeek {
|
||
|
NSCalendar *gregorian = [[NSCalendar alloc]
|
||
|
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
[gregorian setFirstWeekday:2]; //monday is first day
|
||
|
|
||
|
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
|
||
|
|
||
|
NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];
|
||
|
[componentsToSubtract setDay: - ((([components weekday] - [gregorian firstWeekday])
|
||
|
+ 7 ) % 7)];
|
||
|
NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract toDate:[NSDate date] options:0];
|
||
|
|
||
|
NSDateComponents *componentsStripped = [gregorian components: (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
|
||
|
fromDate: beginningOfWeek];
|
||
|
|
||
|
//gestript
|
||
|
beginningOfWeek = [gregorian dateFromComponents: componentsStripped];
|
||
|
|
||
|
return beginningOfWeek;
|
||
|
}
|
||
|
|
||
|
+(NSDate *)dateEndOfWeek {
|
||
|
NSCalendar *gregorian =[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||
|
|
||
|
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
|
||
|
|
||
|
|
||
|
NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init];
|
||
|
[componentsToAdd setDay: + (((([components weekday] - [gregorian firstWeekday])
|
||
|
+ 7 ) % 7))+6];
|
||
|
NSDate *endOfWeek = [gregorian dateByAddingComponents:componentsToAdd toDate:[NSDate date] options:0];
|
||
|
|
||
|
NSDateComponents *componentsStripped = [gregorian components: (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
|
||
|
fromDate: endOfWeek];
|
||
|
|
||
|
//gestript
|
||
|
endOfWeek = [gregorian dateFromComponents: componentsStripped];
|
||
|
return endOfWeek;
|
||
|
}
|
||
|
@end
|