//
// NSDate+PJ.h
// 时间处理
//
// Created by pj on 14-8-9.
// Copyright (c) 2014年 pj. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef struct{
NSInteger y; // 间隔年
NSInteger M; // 间隔月
NSInteger d; // 间隔日
NSInteger h; // 间隔时
NSInteger m; // 间隔分
NSInteger s; // 间隔秒
}PJInterValTime;
@interface NSDate (PJ)
/**
*
获取当前时间yyyy-MM-dd hh:mm:ss
*/
+ (NSString *)getTime;
/**
*
获取当前时间,后面一个参数填写间隔天数,返回NSDATE
*/
+ (NSDate *)getTimeDayD:(NSInteger)IntervalD;
/**
*
获取当前时间,后面一个参数填写间隔月,返回NSDATE
*/
+ (NSDate *)getTimeDayMM:(NSInteger)IntervalD;
/**
*
获取当前时间,后面一个参数填写间隔年,返回NSDATE
*/
+ (NSDate *)getTimeDayY:(NSInteger)IntervalD;
/**
*
获取当前时间,后面一个参数填写间隔秒,返回NSDATE
*/
+ (NSDate *)getTimeDayS:(NSTimeInterval)IntervalS;
/**
*
获取当前时间,后面一个参数填写间小时,返回NSDATE
*/
+ (NSDate *)getTimeDayH:(NSInteger)IntervalS;
/**
*
获取当前时间,后面一个参数填写间分,返回NSDATE
*/
+ (NSDate *)getTimeDayM:(NSInteger)IntervalS;
/**
*
获取当前时间,后面一个参数填写间隔天数,返回NSString
*/
+ (NSString *)getTimeDayString:(NSInteger)Interval;
/**
*
格式化时间,默认格式为yyyy-MM-dd hh:mm:ss
*/
+ (NSString *)getFormateDate:(NSDate *)date formate:(NSString *)formate;
/**
*
格式化时间,默认格式为yyyy-MM-dd hh:mm:ss,返回PJInterValTime
*/
+ (PJInterValTime)getFormateDatePJ:(NSDate *)date;
/**
*
格式化时间,默认格式为yyyy-MM-dd hh:mm:ss,返回PJInterValTime
*/
+ (NSDate*)getFormatePJIntervalTimePJ:(PJInterValTime)date;
/**
*
是否为今天
*/
+ (BOOL)isToday:(NSDate *)date;
/**
*
是否为今年
*/
+ (BOOL)isYear:(NSDate *)date;
/**
*
是否为昨天
*/
+ (BOOL)isYesterday:(NSDate *)date;
/**
*
返回2个时间隔,返回秒
*/
+ (long)getTwoDateIntervalS:(NSDate *)date date2:(NSDate *)date2;
/**
*
返回2个时间间隔,返回分
*/
+ (long)getTwoDateIntervalM:(NSDate *)date date2:(NSDate *)date2;
/**
*
返回2个时间间隔,返回时
*/
+ (long)getTwoDateIntervalH:(NSDate *)date date2:(NSDate *)date2;
/**
*
返回2个时间间隔,返回天
*/
+ (long)getTwoDateIntervalD:(NSDate *)date date2:(NSDate *)date2;
/**
*
返回2个时间间隔,返回月
*/
+ (long)getTwoDateIntervalMM:(NSDate *)date date2:(NSDate *)date2;
/**
*
返回2个时间间隔,返回PJInterValTime
*/
+ (PJInterValTime)getTwoDateInterval:(NSDate *)date date2:(NSDate *)date2;
+ (void)printfPjInterval:(PJInterValTime)pj;
@end
//
// NSDate+PJ.m
// 时间处理
//
// Created by pj on 14-8-9.
// Copyright (c) 2014年 pj. All rights reserved.
//
#import "NSDate+PJ.h"
@implementation NSDate (PJ)
+ (NSString *)getTime
{
NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
ndf.dateFormat = @"yyyy-MM-dd hh:mm:ss";
return [ndf stringFromDate:[NSDate date]];
}
+ (NSDate *)getTimeDayD:(NSInteger)Interval
{
long dayTimeS = 24 * Interval;
return [self getTimeDayH:dayTimeS];
}
+ (NSDate *)getTimeDayY:(NSInteger)IntervalD
{
// 这个怎么做呢? 间隔月,那么我们就要先格式化出日期
PJInterValTime pj = [self getFormateDatePJ:[NSDate date]];
pj.y+=IntervalD;
// 格式化
return [self getFormatePJIntervalTimePJ:pj];
}
+ (NSDate *)getTimeDayMM:(NSInteger)IntervalD
{
// 间隔月,那么我们就要先格式化出日期
PJInterValTime pj = [self getFormateDatePJ:[NSDate date]];
// 先判断这个IntervalD这个是否大于12个月
int y = 0;
int M = 0;
if (IntervalD > 0) {
// 说明已经超过了一年
// 算出年
y = IntervalD / 12;
if (IntervalD % 12 != 0) {
M = IntervalD % 12;
if (pj.M+M > 12) {
y+=1;
M = pj.M + M - 12;
pj.M = 0;
}
}
}else if(IntervalD < 0)
{
// 算出年
y = IntervalD / 12;
// 取余数
int tempM = IntervalD % 12;
// 如果小于0,先判断月份是否相等
M = tempM;
if (-tempM == pj.M) {
y-=1;
M=12;
pj.M = 0;
// 如果大于我们
}else if(-tempM > pj.M)
{
y-=1;
M = 12 -(-tempM - pj.M);
pj.M = 0;
}
}
else
{
// 木有超过,直接赋值
M = IntervalD;
}
pj.y += y;
pj.M += M;
// 格式化
return [self getFormatePJIntervalTimePJ:pj];
}
/**
*
获取当前时间,后面一个参数填写间小时,返回NSDATE
*/
+ (NSDate *)getTimeDayH:(NSInteger)IntervalS
{
long dayTimeS = 60 * IntervalS;
return [self getTimeDayM:dayTimeS];
}
/**
*
获取当前时间,后面一个参数填写分钟,返回NSDATE
*/
+ (NSDate *)getTimeDayM:(NSInteger)IntervalS
{
long dayTimeS = 60 * IntervalS;
return [self getTimeDayS:dayTimeS];
}
+ (NSDate *)getTimeDayS:(NSTimeInterval)IntervalS
{
NSDate *date = [NSDate date];
date = [date dateByAddingTimeInterval:IntervalS];
return date;
}
+ (NSString *)getTimeDayString:(NSInteger)Interval
{
long dayTimeS = 60 * 60 * 24 * Interval;
NSDate *date = [NSDate date];
date = [date dateByAddingTimeInterval:dayTimeS];
return [self getFormateDate:date formate:nil];
}
+ (NSString *)getFormateDate:(NSDate *)date formate:(NSString *)formate
{
if (formate == nil) {
formate = @"yyyy-MM-dd";
}
NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
ndf.dateFormat = formate;
return [ndf stringFromDate:date];
}
+ (PJInterValTime)getFormateDatePJ:(NSDate *)date
{
NSString *formate = @"yyyy-MM-dd-hh-mm-ss";
NSArray *strArray = [[self getFormateDate:date formate:formate] componentsSeparatedByString:@"-"];
PJInterValTime pj;
pj.y = [strArray[0] integerValue];
pj.M = [strArray[1] integerValue];
pj.d = [strArray[2] integerValue];
pj.h = [strArray[3] integerValue];
pj.m = [strArray[4] integerValue];
pj.s = [strArray[5] integerValue];
return pj;
}
+ (NSDate*)getFormatePJIntervalTimePJ:(PJInterValTime)date
{
NSString *formate = @"yyyy-MM-dd-hh-mm-ss";
NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
ndf.dateFormat = formate;
NSString *str = [NSString stringWithFormat:@"%d-%d-%d-%d-%d-%d",date.y,date.M,date.d,date.h,date.m,date.s];
return [ndf dateFromString:str];
}
+ (BOOL)isToday:(NSDate *)date
{
NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
ndf.dateFormat = @"yyyy-MM-dd";
NSString *date1 = [ndf stringFromDate:[NSDate date]];
NSString *date2 = [ndf stringFromDate:date];
return [date1 isEqualToString:date2];
}
+ (BOOL)isYear:(NSDate *)date
{
NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
ndf.dateFormat = @"yyyy";
NSString *date1 = [ndf stringFromDate:[NSDate date]];
NSString *date2 = [ndf stringFromDate:date];
return [date1 isEqualToString:date2];
}
+ (BOOL)isYesterday:(NSDate *)date
{
// 是否为昨天,把今天的时间倒退一天
long dayTimeS = 60 * 60 * 24;
date = [date dateByAddingTimeInterval:-dayTimeS];
return [self isToday:date];
}
+ (long)getTwoDateIntervalS:(NSDate *)date date2:(NSDate *)date2
{
double date1s = [date timeIntervalSinceDate:date2];
date1s = date1s > 0?date1s+1:date1s-1;
return date1s;
}
/**
*
返回2个时间间隔,返回分
*/
+ (long)getTwoDateIntervalM:(NSDate *)date date2:(NSDate *)date2
{
long dateInterval = [self getTwoDateIntervalS:date date2:date2];
return dateInterval / 60.0 ;
// int days=((int)time)/(3600*24);
// int hours=((int)time)%(3600*24)/3600;
// NSString *dateContent=[[NSString alloc] initWithFormat:@"%i天%i小时",days,hours];
}
/**
*
返回2个时间间隔,返回时
*/
+ (long)getTwoDateIntervalH:(NSDate *)date date2:(NSDate *)date2
{
long dateInterval = [self getTwoDateIntervalM:date date2:date2];
return dateInterval / 60.0;
}
/**
*
返回2个时间间隔,返回天
*/
+ (long)getTwoDateIntervalD:(NSDate *)date date2:(NSDate *)date2
{
long dateInterval = [self getTwoDateIntervalH:date date2:date2];
return dateInterval / 24;
}
/**
*
返回2个时间间隔,返回月
*/
+ (long)getTwoDateIntervalMM:(NSDate *)date date2:(NSDate *)date2
{
// 返回月我们就不能用秒了
long date1Y = [[self getFormateDate:date formate:@"yyyy"] integerValue];
long date2Y = [[self getFormateDate:date2 formate:@"yyyy"] integerValue];
// 计算大小
long intervalMM = (date2Y - date1Y) * 12; // 乘以12个月
long date1m = [[self getFormateDate:date formate:@"MM"] integerValue];
long date2m = [[self getFormateDate:date2 formate:@"MM"] integerValue];
return intervalMM+=date2m-date1m;
}
+ (PJInterValTime)getTwoDateInterval:(NSDate *)date date2:(NSDate *)date2
{
// 年的话,我们需要考虑闰年,等等,所以我们用格式化日期
PJInterValTime p = [self getFormateDatePJ:date];
PJInterValTime p2 = [self getFormateDatePJ:date2];
PJInterValTime r;
r.y = p2.y - p.y;
r.M = p2.M - p.M;
r.d = p2.d - p.d;
r.h = p2.h - p.h;
r.m = p2.m - p.m;
r.s = p2.s - p.s;
NSTimeInterval d1 = [date timeIntervalSince1970];
NSTimeInterval d2 = [date2 timeIntervalSince1970];
r.s = (d2 - d1);
r.m = r.s / 60;
r.h = r.m / 60;
r.d = r.h / 24;
return r;
}
+ (void)printfPjInterval:(PJInterValTime)pj
{
NSString *str = [NSString stringWithFormat:@"%d年%d月%d日%d时%d分%d秒",pj.y,pj.M,pj.d,pj.h,pj.m,pj.s];
NSLog(@"%@",str);
}
@end