NSDate+Until.h
//
// NSDate+Until.h
//
//
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSInteger, DateType){
DateTypeYear=0,
DateTypeMonth,
DateTypeDay,
DateTypeHour,
DateTypeminute,
DateTypeSecond
};
/**
* 常用日期结构:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy
*/
@interface NSDate (Until)
///获取当前时间
+ (NSString *)until_getTodayDateStrWithDateformatterStr:(NSString *)formatterStr;
///字符串转date
+ (NSDate *)until_getDatefromDateStr:(NSString *)dateStr formatterStr:(NSString *)formatterStr;
///指定日期从字符串转特定格式字符串
+(NSString *)until_getStringfromDateStr:(NSString *)dateStr currentFormat:(NSString*)currentFormat formatterStr:(NSString *)formatterStr;
///获取N天后的日期
+ (NSString *)until_getNewDateFromDate:(NSDate *)date afterDays:(NSInteger)dayNum;
///获取N天前的日期
+ (NSString *)until_getNewDateFromDate:(NSDate *)date beforeDays:(NSInteger)dayNum;
///获取N年后的日期
+ (NSDate *)until_getNewDateFromDate:(NSDate *)date afterYears:(NSInteger)years;
///获取指定日期的第一天和最后一天
+(NSArray *)getMonthFirstAndLastDayWith:(NSString *)dateStr;
///获取指定日期的第一天
+(NSString *)getMonthFirstDayWith:(NSString*)dateStr;
///获取指定日期的最后一天
+(NSString *)getMonthLastDayWith:(NSString*)dateStr;
///比较日期大小
+ (NSComparisonResult)until_compareOneDay:(NSString *)oneDay withAnotherDay:(NSString *)anotherDay;
/**
获取时间差
*/
+ (NSTimeInterval)util_getResultWithStarTime:(NSString *)starTime endTime:(NSString *)endTime;
+ (NSTimeInterval)util_getResultWithStarTime:(NSString *)starTime endTime:(NSString *)endTime withFormat:(NSString*)format;
/**
* 获取当前日期是星期几
**/
+ (NSString *)getweekDayStringWithDate;
/**
* 获取指定日期是星期几
**/
+(NSString*)getWeekDayStrignWithDate:(NSString*)date;
/**
* 根据指定类型获取获取当前日期的年、月、日、时、分、秒
**/
+(NSString*)GetCurrentDateYearOrMouthOrDay:(DateType)dataType;
/**
* 根据指定当类型获取指定日期的年、月、日、时、分、秒
**/
+(NSString*)GetCurrentDateYearOrMouthOrDay:(DateType)dataType withDate:(NSString*)pointDate;
/**
* 获取当前月份一共有多少天
**/
+(NSString*)getCurrentDateDays;
/**
* 获取本周详细日期从星期一到星期日yyyy-MM-dd
**/
+(NSMutableArray *)backWeeksTimeNumber:(NSInteger)number;
/**
* 获取本周详细日期从星期一到星期日MM/dd
**/
+(NSMutableArray*)GetdateformatterwithArray;
/**
* 获取本月详细日期从1号到月末yyyy-MM-dd
**/
+(NSMutableArray*)getCurrentMonthDetailArray;
/**
* 获取本月详细日期从1号到月末MM/dd
**/
+(NSMutableArray*)GetdateformatterMonthWithArray;
/**
* 时间戳转换成时间
**/
+ (NSString *)getTimeFromTimestamp:(double)tamp withFormat:(NSString*)format;
/**
* 当前时间转成时间戳
**/
+ (NSString*)getTimeTampWithCurrentTime;
/**
* 指定时间转成时间戳
**/
+ (NSString*)timeSwitchTimestamp:(NSString *)formatTime andFormatter:(NSString *)format;
@end
//
// NSDate+Until.m
// Mango_Until
//
// Created by GN on 2018/6/5.
// Copyright © 2018年 Mango. All rights reserved.
//
#import "NSDate+Until.h"
@implementation NSDate (Until)
//获取今天日期字符串
+ (NSString *)until_getTodayDateStrWithDateformatterStr:(NSString *)formatterStr{
NSDate * nowDate=[NSDate date];
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatterStr];
NSString * locationString=[dateFormatter stringFromDate:nowDate];
return locationString;
}
//string转date
+ (NSDate *)until_getDatefromDateStr:(NSString *)dateStr formatterStr:(NSString *)formatterStr{
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatterStr];
NSDate *newDate = [dateFormatter dateFromString:dateStr];
return newDate;
}
//指定日期从字符串转特定格式字符串
+(NSString *)until_getStringfromDateStr:(NSString *)dateStr currentFormat:(NSString*)currentFormat formatterStr:(NSString *)formatterStr{
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:currentFormat];
NSDate *newDate = [dateFormatter dateFromString:dateStr];
[dateFormatter setDateFormat:formatterStr];
NSString *finalDate=[dateFormatter stringFromDate:newDate];
return finalDate;
}
//获取N天后的日期
+ (NSString *)until_getNewDateFromDate:(NSDate *)date afterDays:(NSInteger)dayNum {
NSTimeInterval oneDayTime = 24 * 60 * 60 * dayNum;
NSDate *newDate = [date dateByAddingTimeInterval: oneDayTime];
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString * newDateStr = [dateFormatter stringFromDate:newDate];
return newDateStr;
}
//获取N天前的日期
+ (NSString *)until_getNewDateFromDate:(NSDate *)date beforeDays:(NSInteger)dayNum {
NSTimeInterval oneDayTime = 24 * 60 * 60 * dayNum;
NSDate *newDate = [date dateByAddingTimeInterval:-oneDayTime];
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString * newDateStr = [dateFormatter stringFromDate:newDate];
return newDateStr;
}
+ (NSArray *)getMonthFirstAndLastDayWith:(NSString *)dateStr{
NSDateFormatter *format=[[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd"];
NSDate *newDate=[format dateFromString:dateStr];
double interval = 0;
NSDate *firstDate = nil;
NSDate *lastDate = nil;
NSCalendar *calendar = [NSCalendar currentCalendar];
BOOL OK = [calendar rangeOfUnit:NSCalendarUnitMonth startDate:& firstDate interval:&interval forDate:newDate];
if (OK) {
lastDate = [firstDate dateByAddingTimeInterval:interval - 1];
}else {
return @[@"",@""];
}
NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];
[myDateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *firstString = [myDateFormatter stringFromDate: firstDate];
NSString *lastString = [myDateFormatter stringFromDate: lastDate];
return @[firstString, lastString];
}
+(NSString *)getMonthFirstDayWith:(NSString*)dateStr{
NSDateFormatter *format=[[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd"];
NSDate *newDate=[format dateFromString:dateStr];
double interval = 0;
NSDate *firstDate = nil;
NSDate *lastDate = nil;
NSCalendar *calendar = [NSCalendar currentCalendar];
BOOL OK = [calendar rangeOfUnit:NSCalendarUnitMonth startDate:& firstDate interval:&interval forDate:newDate];
if (OK) {
lastDate = [firstDate dateByAddingTimeInterval:interval - 1];
}else {
return @"";
}
NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];
[myDateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *firstString = [myDateFormatter stringFromDate: firstDate];
return firstString;
}
+(NSString *)getMonthLastDayWith:(NSString*)dateStr{
NSDateFormatter *format=[[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd"];
NSDate *newDate=[format dateFromString:dateStr];
double interval = 0;
NSDate *firstDate = nil;
NSDate *lastDate = nil;
NSCalendar *calendar = [NSCalendar currentCalendar];
BOOL OK = [calendar rangeOfUnit:NSCalendarUnitMonth startDate:& firstDate interval:&interval forDate:newDate];
if (OK) {
lastDate = [firstDate dateByAddingTimeInterval:interval - 1];
}else {
return @"";
}
NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];
[myDateFormatter setDateFormat:@"yyyy-MM-dd"];
// NSString *firstString = [myDateFormatter stringFromDate: firstDate];
NSString *lastString = [myDateFormatter stringFromDate: lastDate];
return lastString;
}
//获取N年后的date
+ (NSDate *)until_getNewDateFromDate:(NSDate *)date afterYears:(NSInteger)years {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:years];//设置最大时间为:当前时间推后十年
NSDate *newDate = [calendar dateByAddingComponents:comps toDate:date options:0];
return newDate;
}
//比较日期大小
+ (NSComparisonResult)until_compareOneDay:(NSString *)oneDay withAnotherDay:(NSString *)anotherDay {
NSDate *dateA = [self until_getDatefromDateStr:oneDay formatterStr:@"yyyy-MM-dd"];
NSDate *dateB = [self until_getDatefromDateStr:anotherDay formatterStr:@"yyyy-MM-dd"];
NSComparisonResult result = [dateA compare:dateB];
return result;
}
/**
获取时间差
*/
+ (NSTimeInterval)util_getResultWithStarTime:(NSString *)starTime endTime:(NSString *)endTime {
return [NSDate util_getResultWithStarTime:starTime endTime:endTime withFormat:@"yyyy-MM-dd"];
}
+ (NSTimeInterval)util_getResultWithStarTime:(NSString *)starTime endTime:(NSString *)endTime withFormat:(NSString*)format{
NSDateFormatter* formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:format];//根据自己的需求定义格式
NSDate* startDate = [formater dateFromString:starTime];
NSDate* endDate = [formater dateFromString:endTime];
NSTimeInterval time = [endDate timeIntervalSinceDate:startDate];
return time;
}
+(NSString*)getWeekDayStrignWithDate:(NSString*)date{
NSDate *nowDate=[NSDate until_getDatefromDateStr:date formatterStr:@"yyyy-MM-dd"];
NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; // 指定日历的算法
NSDateComponents *comps = [calendar components:NSCalendarUnitWeekday fromDate:nowDate];
// 1 是周日,2是周一 3.以此类推
NSNumber * weekNumber = @([comps weekday]);
NSInteger weekInt = [weekNumber integerValue];
NSString *weekDayString = @"(周一)";
NSString *returnDayString;
switch (weekInt) {
case 1:
{
weekDayString = @"(周日)";
returnDayString=@"1";
}
break;
case 2:
{
weekDayString = @"(周一)";
returnDayString=@"2";
}
break;
case 3:
{
weekDayString = @"(周二)";
returnDayString=@"3";
}
break;
case 4:
{
weekDayString = @"(周三)";
returnDayString=@"4";
}
break;
case 5:
{
weekDayString = @"(周四)";
returnDayString=@"5";
}
break;
case 6:
{
weekDayString = @"(周五)";
returnDayString=@"6";
}
break;
case 7:
{
weekDayString = @"(周六)";
returnDayString=@"7";
}
break;
default:
break;
}
DLog(@"===当前日期所对应星期%@",weekDayString);
return returnDayString;
}
+ (NSString *)getweekDayStringWithDate
{
NSString *now=[NSDate until_getTodayDateStrWithDateformatterStr:@"yyyy-MM-dd HH-mm-ss"];
return [NSDate getWeekDayStrignWithDate:now];
}
//获取当前日期的相关年、月、日、时、分、秒
+(NSString*)GetCurrentDateYearOrMouthOrDay:(DateType)dataType{
//获取当前时间
NSString *now=[NSDate until_getTodayDateStrWithDateformatterStr:@"yyyy-MM-dd HH-mm-ss"];
DLog(@"now date is: %@", now);
return [NSDate GetCurrentDateYearOrMouthOrDay:dataType withDate:now];
}
//获取指定日期的相关年、月、日、时、分、秒
+(NSString*)GetCurrentDateYearOrMouthOrDay:(DateType)dataType withDate:(NSString*)pointDate{
NSDate *now=[NSDate until_getDatefromDateStr:pointDate formatterStr:@"yyyy-MM-dd HH-mm-ss"];//根据需求自己定义格式
//返回值
NSString*currentString=@"";
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now];
long year = [dateComponent year];
long month = [dateComponent month];
long day = [dateComponent day];
long hour = [dateComponent hour];
long minute = [dateComponent minute];
long second = [dateComponent second];
switch (dataType) {
case DateTypeYear:
currentString=NSStringFormat(@"%ld",year);
break;
case DateTypeMonth:
currentString=NSStringFormat(@"%ld",month);
break;
case DateTypeDay:
currentString=NSStringFormat(@"%ld",day);
break;
case DateTypeHour:
currentString=NSStringFormat(@"%ld",hour);
break;
case DateTypeminute:
if(minute<10){
currentString=NSStringFormat(@"0%ld",minute);
}else{
currentString=NSStringFormat(@"%ld",minute);
}
break;
case DateTypeSecond:
currentString=NSStringFormat(@"%ld",second);
break;
default:
currentString=NSStringFormat(@"%ld",month);
break;
}
return currentString;
}
+ (NSString *)getCurrentDateDays{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:[NSDate date]];
NSUInteger numberOfDaysInMonth = range.length;
return NSStringFormat(@"%lu",(unsigned long)numberOfDaysInMonth);
}
//ps number 0 为当前周 依次类推
//获取本周详细日期
+(NSMutableArray *)backWeeksTimeNumber:(NSInteger)number
{
NSDate *date = [[NSDate date] dateByAddingTimeInterval:- 7 * 24 * 3600 * number];
//滚动后,算出当前日期所在的周(周一-周日)
NSCalendar *gregorian = [NSCalendar currentCalendar];
NSDateComponents *comp = [gregorian components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday fromDate:date];
NSInteger weekDay = [comp weekday]-1 ;
// 得到几号
NSInteger day = [comp day];
NSLog(@"weekDay:%ld day:%ld",weekDay,day);
// 计算当前日期和这周的星期一和星期天差的天数
long firstDiff,lastDiff;
if (weekDay == -1)
{ firstDiff = 1;
lastDiff = 0;
}
else
{
firstDiff = [gregorian firstWeekday] - weekDay;
lastDiff = 7 - weekDay;
}
NSMutableArray *currentWeeks = [self getCurrentWeeksWithFirstDiff:firstDiff lastDiff:lastDiff];
return currentWeeks;
}
//获取特定本周格式字符串
+(NSMutableArray*)GetdateformatterwithArray{
NSMutableArray *arrayFormatter=[NSMutableArray new];
NSMutableArray *arrayWeek=[NSDate backWeeksTimeNumber:0];
NSString *strFormat;
for (strFormat in arrayWeek) {
NSString *currentFomat=[NSDate until_getStringfromDateStr:strFormat currentFormat:@"yyyy-MM-dd" formatterStr:@"MM/dd"];
[arrayFormatter addObject:currentFomat];
}
return arrayFormatter;
}
//获取特定本月格式字符串
+(NSMutableArray*)GetdateformatterMonthWithArray{
NSMutableArray *arrayFormatter=[NSMutableArray new];
NSMutableArray *arrayMonth=[NSDate getCurrentMonthDetailArray];
NSString *strFormat;
for (strFormat in arrayMonth) {
NSString *currentFomat=[NSDate until_getStringfromDateStr:strFormat currentFormat:@"yyyy-MM-dd" formatterStr:@"MM/dd"];
[arrayFormatter addObject:currentFomat];
}
return arrayFormatter;
}
+(NSMutableArray *)getCurrentWeeksWithFirstDiff:(NSInteger)first lastDiff:(NSInteger)last
{
NSMutableArray *eightArr = [[NSMutableArray alloc] init];
for (NSInteger i = first; i < last + 1; i ++)
{
//从现在开始的24小时
NSTimeInterval secondsPerDay = i * 24*60*60;
NSDate *curDate = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateStr = [dateFormatter stringFromDate:curDate];
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"zn_CN"]];
NSString *strTime = [NSString stringWithFormat:@"%@",dateStr];
[eightArr addObject:strTime];
}
return eightArr;
}
+(NSMutableArray*)getCurrentMonthDetailArray{
NSMutableArray *dateArray = [[NSMutableArray alloc] init];
//获取当月第一天
NSString*firstDay=[self getMonthFirstDayWith:[self until_getTodayDateStrWithDateformatterStr:@"yyyy-MM-dd"]];
//获取当月一共有多少天
NSString*getCurrentMonthDays=[self getCurrentDateDays];
//循环将之后的每一天存储到数组中
for(NSInteger i=0;i<getCurrentMonthDays.integerValue;i++){
//将第一天的字符串日期转成date
NSDate *dateFirst=[self until_getDatefromDateStr:firstDay formatterStr:@"yyyy-MM-dd"];
//获取指定日期之后的一天具体的日期
NSString *afterDate=[self until_getNewDateFromDate:dateFirst afterDays:i];
[dateArray addObject:afterDate];
}
return dateArray;
}
+ (NSString *)getTimeFromTimestamp:(double)tamp withFormat:(NSString*)format{
//将对象类型的时间转换为NSDate类型
// double time =1504667976;
NSTimeInterval interval = tamp/ 1000.0;
NSDate * myDate=[NSDate dateWithTimeIntervalSince1970:interval];
//设置时间格式
NSDateFormatter * formatter=[[NSDateFormatter alloc]init];
[formatter setDateFormat:format];
//将时间转换为字符串
NSString *timeStr=[formatter stringFromDate:myDate];
return timeStr;
}
+ (NSString *)getTimeTampWithCurrentTime{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
//设置时区,这个对于时间的处理有时很重要
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
[formatter setTimeZone:timeZone];
NSDate *datenow = [NSDate date];//现在时间
// NSLog(@"设备当前的时间:%@",[formatter stringFromDate:datenow]);
//时间转时间戳的方法:
NSInteger timeSp = [[NSNumber numberWithDouble:[datenow timeIntervalSince1970]] integerValue];
// NSLog(@"设备当前的时间戳:%ld",(long)timeSp); //时间戳的值
return NSStringFormat(@"%f",(long)timeSp*1000.0);
}
+(NSString *)timeSwitchTimestamp:(NSString *)formatTime andFormatter:(NSString *)format{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:format]; //(@"YYYY-MM-dd hh:mm:ss") ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Beijing"];
[formatter setTimeZone:timeZone];
NSDate* date = [formatter dateFromString:formatTime]; //------------将字符串按formatter转成nsdate
//时间转时间戳的方法:
NSInteger timeSp = [[NSNumber numberWithDouble:[date timeIntervalSince1970]] integerValue];
//NSLog(@"将某个时间转化成 时间戳&&&&&&&timeSp:%ld",(long)timeSp); //时间戳的值
NSString *time=NSStringFormat(@"%f",(long)timeSp*1000.0);
return time;
}
@end
网友评论