123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- //
- // NSDate+YYAdd.m
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // Created by ibireme on 13/4/11.
- // Copyright (c) 2015 ibireme.
- //
- // This source code is licensed under the MIT-style license found in the
- // LICENSE file in the root directory of this source tree.
- //
- #import "NSDate+YYAdd.h"
- #import "YYKitMacro.h"
- #import <time.h>
- YYSYNTH_DUMMY_CLASS(NSDate_YYAdd)
- @implementation NSDate (YYAdd)
- - (NSInteger)year {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitYear fromDate:self] year];
- }
- - (NSInteger)month {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitMonth fromDate:self] month];
- }
- - (NSInteger)day {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:self] day];
- }
- - (NSInteger)hour {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitHour fromDate:self] hour];
- }
- - (NSInteger)minute {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitMinute fromDate:self] minute];
- }
- - (NSInteger)second {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitSecond fromDate:self] second];
- }
- - (NSInteger)nanosecond {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitSecond fromDate:self] nanosecond];
- }
- - (NSInteger)weekday {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekday fromDate:self] weekday];
- }
- - (NSInteger)weekdayOrdinal {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekdayOrdinal fromDate:self] weekdayOrdinal];
- }
- - (NSInteger)weekOfMonth {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekOfMonth fromDate:self] weekOfMonth];
- }
- - (NSInteger)weekOfYear {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitWeekOfYear fromDate:self] weekOfYear];
- }
- - (NSInteger)yearForWeekOfYear {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitYearForWeekOfYear fromDate:self] yearForWeekOfYear];
- }
- - (NSInteger)quarter {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitQuarter fromDate:self] quarter];
- }
- - (BOOL)isLeapMonth {
- return [[[NSCalendar currentCalendar] components:NSCalendarUnitQuarter fromDate:self] isLeapMonth];
- }
- - (BOOL)isLeapYear {
- NSUInteger year = self.year;
- return ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0)));
- }
- - (BOOL)isToday {
- if (fabs(self.timeIntervalSinceNow) >= 60 * 60 * 24) return NO;
- return [NSDate new].day == self.day;
- }
- - (BOOL)isYesterday {
- NSDate *added = [self dateByAddingDays:1];
- return [added isToday];
- }
- - (NSDate *)dateByAddingYears:(NSInteger)years {
- NSCalendar *calendar = [NSCalendar currentCalendar];
- NSDateComponents *components = [[NSDateComponents alloc] init];
- [components setYear:years];
- return [calendar dateByAddingComponents:components toDate:self options:0];
- }
- - (NSDate *)dateByAddingMonths:(NSInteger)months {
- NSCalendar *calendar = [NSCalendar currentCalendar];
- NSDateComponents *components = [[NSDateComponents alloc] init];
- [components setMonth:months];
- return [calendar dateByAddingComponents:components toDate:self options:0];
- }
- - (NSDate *)dateByAddingWeeks:(NSInteger)weeks {
- NSCalendar *calendar = [NSCalendar currentCalendar];
- NSDateComponents *components = [[NSDateComponents alloc] init];
- [components setWeekOfYear:weeks];
- return [calendar dateByAddingComponents:components toDate:self options:0];
- }
- - (NSDate *)dateByAddingDays:(NSInteger)days {
- NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + 86400 * days;
- NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
- return newDate;
- }
- - (NSDate *)dateByAddingHours:(NSInteger)hours {
- NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + 3600 * hours;
- NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
- return newDate;
- }
- - (NSDate *)dateByAddingMinutes:(NSInteger)minutes {
- NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + 60 * minutes;
- NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
- return newDate;
- }
- - (NSDate *)dateByAddingSeconds:(NSInteger)seconds {
- NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + seconds;
- NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
- return newDate;
- }
- - (NSString *)stringWithFormat:(NSString *)format {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- [formatter setDateFormat:format];
- [formatter setLocale:[NSLocale currentLocale]];
- return [formatter stringFromDate:self];
- }
- - (NSString *)stringWithFormat:(NSString *)format timeZone:(NSTimeZone *)timeZone locale:(NSLocale *)locale {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- [formatter setDateFormat:format];
- if (timeZone) [formatter setTimeZone:timeZone];
- if (locale) [formatter setLocale:locale];
- return [formatter stringFromDate:self];
- }
- - (NSString *)stringWithISOFormat {
- static NSDateFormatter *formatter = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- formatter = [[NSDateFormatter alloc] init];
- formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
- formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
- });
- return [formatter stringFromDate:self];
- }
- + (NSDate *)dateWithString:(NSString *)dateString format:(NSString *)format {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- [formatter setDateFormat:format];
- return [formatter dateFromString:dateString];
- }
- + (NSDate *)dateWithString:(NSString *)dateString format:(NSString *)format timeZone:(NSTimeZone *)timeZone locale:(NSLocale *)locale {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- [formatter setDateFormat:format];
- if (timeZone) [formatter setTimeZone:timeZone];
- if (locale) [formatter setLocale:locale];
- return [formatter dateFromString:dateString];
- }
- + (NSDate *)dateWithISOFormatString:(NSString *)dateString {
- static NSDateFormatter *formatter = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- formatter = [[NSDateFormatter alloc] init];
- formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
- formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
- });
- return [formatter dateFromString:dateString];
- }
- @end
|