注释说明已加好。
代码如下
.h文件
//
// NSDate+Calendar.h
// VoiceDairy
//
// Created by snowpuslar on 15/9/20.
// Copyright © 2015年 snowpuslar. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSDate (Calendar)
/**
* 根据给定的日期设置得到该日期所在周是当月的第几周
*
* @param dateComponets 给定的日期设置
*
* @return 给定日期设置所在周在当月的索引
*/
+ (NSInteger)orderOfWeekInMonthForDateComponents:(NSDateComponents *)dateComponets;
/**
* 根据给定的日期设置得到该日期是周几(索引)
*
* @param dateComponets 给定的日期设置
*
* @return 周几(索引)
*/
+ (NSInteger)orderOfDayInWeekForDateComponents:(NSDateComponents *)dateComponets;
/**
* 根据给定的日期设置得到该日期当月共有几周
*
* @param dateComponets 给定的日期设置
*
* @return 给定日期设置当月的总周数
*/
+ (NSInteger)numberOfWeeksInMonthForDateComponents:(NSDateComponents *)dateComponets;
/**
* 根据给定的日期设置得到该日期当月共有多少天
*
* @param dateComponets 给定的日期设置
*
* @return 给定日期设置当月的总天数
*/
+ (NSInteger)numberOfDaysInMonthForDateComponents:(NSDateComponents *)dateComponets;
/**
* 根据给定的日期得到该日期的年
*
* @param date 给定的日期
*
* @return 日期的年
*/
+ (NSInteger)yearForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期的月
*
* @param date 给定的日期
*
* @return 日期的月
*/
+ (NSInteger)monthForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期的日
*
* @param date 给定的日期
*
* @return 日期的日
*/
+ (NSInteger)dayForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期所在周是当月的第几周
*
* @param date 给定的日期
*
* @return 给定日期所在周在当月的索引
*/
+ (NSInteger)orderOfWeekInMonthForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期是周几(索引)
*
* @param date 给定的日期
*
* @return 周几(索引)
*/
+ (NSInteger)orderOfDayInWeekForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期当月共有几周
*
* @param date 给定的日期
*
* @return 给定日期当月的总周数
*/
+ (NSInteger)numberOfWeeksInMonthForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期当月共有多少天
*
* @param date 给定的日期
*
* @return 给定日期当月的总天数
*/
+ (NSInteger)numberOfDaysInMonthForDate:(NSDate *)date;
/**
* 此时当前月共有多少天
*
* @return 此时当前月总天数
*/
+ (NSInteger)numberOfDaysInCurrentMonth;
/**
* 根据给定的日期得到 年月日 时分秒 的格式化输出
*
* @param date 给定的日期
*
* @return 年月日 时分秒 的格式化输出
*/
+ (NSString *)dateForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期的时
*
* @param date 给定的日期
*
* @return 日期的时
*/
+ (NSInteger)hourForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期的分
*
* @param date 给定的日期
*
* @return 日期的分
*/
+ (NSInteger)minuteForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期的秒
*
* @param date 给定的日期
*
* @return 日期的秒
*/
+ (NSInteger)secondForDate:(NSDate *)date;
/**
* 根据给定的日期得到该日期 时分秒 的格式化输出
*
* @param date 给定的日期
*
* @return 时分秒 的格式化输出
*/
+ (NSString *)timeForDate:(NSDate *)date;
@end
.m文件
//
// NSDate+Calendar.m
// VoiceDairy
//
// Created by snowpuslar on 15/9/20.
// Copyright © 2015年 snowpuslar. All rights reserved.
//
#import "NSDate+Calendar.h"
@implementation NSDate (Calendar)
static NSCalendar * myCalendar;
+ (NSCalendar *)calendar
{
if (myCalendar == nil) {
myCalendar = [NSCalendar currentCalendar];
}
return myCalendar;
}
+ (NSInteger)orderOfWeekInMonthForDateComponents:(NSDateComponents *)dateComponets
{
NSDate * date = [[self calendar] dateFromComponents:dateComponets];
return [[self calendar] component:NSCalendarUnitWeekdayOrdinal fromDate:date];
}
+ (NSInteger)orderOfDayInWeekForDateComponents:(NSDateComponents *)dateComponets
{
NSDate * date = [[self calendar] dateFromComponents:dateComponets];
return [[self calendar] component:NSCalendarUnitWeekday fromDate:date];
}
+ (NSInteger)numberOfWeeksInMonthForDateComponents:(NSDateComponents *)dateComponets
{
NSDate * date = [[self calendar] dateFromComponents:dateComponets];
return [[self calendar] rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:date].length;
}
+ (NSInteger)numberOfDaysInMonthForDateComponents:(NSDateComponents *)dateComponets
{
NSDate * date = [[self calendar] dateFromComponents:dateComponets];
return [[self calendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date].length;
}
+ (NSInteger)yearForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitYear fromDate:date];
}
+ (NSInteger)monthForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitMonth fromDate:date];
}
+ (NSInteger)dayForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitDay fromDate:date];
}
+ (NSInteger)orderOfWeekInMonthForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitWeekdayOrdinal fromDate:date];
}
+ (NSInteger)orderOfDayInWeekForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitWeekday fromDate:date];
}
+ (NSInteger)numberOfWeeksInMonthForDate:(NSDate *)date
{
return [[self calendar] rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:date].length;
}
+ (NSInteger)numberOfDaysInMonthForDate:(NSDate *)date
{
return [[self calendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date].length;
}
+ (NSInteger)numberOfDaysInCurrentMonth
{
return [[self calendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:[self date]].length;
}
+ (NSString *)dateForDate:(NSDate *)date
{
return [NSString stringWithFormat:@"%ld-%02ld-%02ld %02ld:%02ld:%02ld", [self yearForDate:date], [self monthForDate:date], [self dayForDate:date], [self hourForDate:date], [self minuteForDate:date],[self secondForDate:date]];
}
+ (NSInteger)hourForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitHour fromDate:date];
}
+ (NSInteger)minuteForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitMinute fromDate:date];
}
+ (NSInteger)secondForDate:(NSDate *)date
{
return [[self calendar] component:NSCalendarUnitSecond fromDate:date];
}
+ (NSString *)timeForDate:(NSDate *)date
{
return [NSString stringWithFormat:@"%02ld:%02ld:%02ld", [self hourForDate:date], [self minuteForDate:date], [self secondForDate:date]];
}
@end