iOS 与日历、日期相关的一些扩展方法

注释说明已加好。

代码如下

.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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值