如何比较两个日期,返回天数

发布于 2024-08-27 20:48:05 字数 606 浏览 13 评论 0原文

如何比较两个日期返回天数。 例如:缺席 X 天的杯赛。 看我的代码。

  NSDateFormatter *df = [[NSDateFormatter alloc]init];  
  [df setDateFormat:@"d MMMM,yyyy"];  
  NSDate *date1 = [df dateFromString:@"11-05-2010"];  
  NSDate *date2 = [df dateFromString:@"11-06-2010"];  
  NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];  
  //int days = (int)interval / 30;  
  //int months = (interval - (months/30)) / 30;  
  NSString *timeDiff = [NSString stringWithFormat:@"%dMissing%d days of the Cup",date1,date2, fabs(interval)];  

  label.text = timeDiff; // output (Missing X days of the Cup)  

how can I compare two dates return number of days.
Ex: Missing X days of the Cup.
look my code.

  NSDateFormatter *df = [[NSDateFormatter alloc]init];  
  [df setDateFormat:@"d MMMM,yyyy"];  
  NSDate *date1 = [df dateFromString:@"11-05-2010"];  
  NSDate *date2 = [df dateFromString:@"11-06-2010"];  
  NSTimeInterval interval = [date2 timeIntervalSinceDate:date1];  
  //int days = (int)interval / 30;  
  //int months = (interval - (months/30)) / 30;  
  NSString *timeDiff = [NSString stringWithFormat:@"%dMissing%d days of the Cup",date1,date2, fabs(interval)];  

  label.text = timeDiff; // output (Missing X days of the Cup)  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

遇到 2024-09-03 20:48:05

来自 Apple 的示例,基本上使用 NSCalendar:

NSDate * date1 = <however you initialize this>;
NSDate * date2 = <...>;

NSCalendar *gregorian = [[NSCalendar alloc]
                 initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
                                          fromDate:date1
                                          toDate:date2 options:0];

NSInteger months = [components month];
NSInteger days = [components day];

From Apple's example, basically use an NSCalendar:

NSDate * date1 = <however you initialize this>;
NSDate * date2 = <...>;

NSCalendar *gregorian = [[NSCalendar alloc]
                 initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
                                          fromDate:date1
                                          toDate:date2 options:0];

NSInteger months = [components month];
NSInteger days = [components day];
渡你暖光 2024-09-03 20:48:05

您可以使用下一个类别:

@interface NSDate (Additions)

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate; 
-(NSInteger)numberOfHoursUntilDay:(NSDate *)aDate;

@end

@implementation NSDate (Additions)
const NSInteger secondPerMunite = 60;       
const NSInteger munitePerHour = 60;
const NSInteger hourPerDay = 24;

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate 
{
    NSInteger selfTimeInterval = [aDate timeIntervalSinceDate:self];   
    return abs(selfTimeInterval / (secondPerMunite * munitePerHour * hourPerDay));    
}

-(NSInteger)numberOfHoursUntilDay:(NSDate *)aDate 
{
    NSInteger selfTimeInterval = [aDate timeIntervalSinceDate:self];
    return abs(selfTimeInterval / (secondPerMunite * munitePerHour));
}
@end

You can use next category:

@interface NSDate (Additions)

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate; 
-(NSInteger)numberOfHoursUntilDay:(NSDate *)aDate;

@end

@implementation NSDate (Additions)
const NSInteger secondPerMunite = 60;       
const NSInteger munitePerHour = 60;
const NSInteger hourPerDay = 24;

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate 
{
    NSInteger selfTimeInterval = [aDate timeIntervalSinceDate:self];   
    return abs(selfTimeInterval / (secondPerMunite * munitePerHour * hourPerDay));    
}

-(NSInteger)numberOfHoursUntilDay:(NSDate *)aDate 
{
    NSInteger selfTimeInterval = [aDate timeIntervalSinceDate:self];
    return abs(selfTimeInterval / (secondPerMunite * munitePerHour));
}
@end
最冷一天 2024-09-03 20:48:05

需要调用此方法并仅设置我们想要以不同方式计算的 2 个日期。

-(void) calculateSleepHours:(NSDate *)sleepDate :(NSDate *)wakeStr 
{

   if (sleepDate !=nil && wakeStr!=nil) {`enter code here`

    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ssZ"];
    NSDate *date1 = [ApplicationManager getInstance].sleepTime;;

    NSDate *date2 = [ApplicationManager getInstance].wakeupTime;

    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];

    NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;

    NSDateComponents *components = [gregorian components:unitFlags
                                                fromDate:date1
                                                  toDate:date2 options:0];

    NSInteger months = [components month];
    NSInteger days = [components day];
    NSInteger hours = [components hour];
    NSInteger minute=[components minute];
    NSInteger second=[components second];
    DLog(@"Month %ld day %ld hour is %ld min %ld sec %ld  ",(long)months,(long)days,(long)hours,(long)minute,(long)second);

    sleepHours.text=[NSString stringWithFormat:@"Hour %ld Min %ld Sec %ld",(long)hours,(long)minute,(long)second];
    }
}

Need to call this method and set 2 dates only which we want to calculate differently.

-(void) calculateSleepHours:(NSDate *)sleepDate :(NSDate *)wakeStr 
{

   if (sleepDate !=nil && wakeStr!=nil) {`enter code here`

    NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
    [dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ssZ"];
    NSDate *date1 = [ApplicationManager getInstance].sleepTime;;

    NSDate *date2 = [ApplicationManager getInstance].wakeupTime;

    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];

    NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit;

    NSDateComponents *components = [gregorian components:unitFlags
                                                fromDate:date1
                                                  toDate:date2 options:0];

    NSInteger months = [components month];
    NSInteger days = [components day];
    NSInteger hours = [components hour];
    NSInteger minute=[components minute];
    NSInteger second=[components second];
    DLog(@"Month %ld day %ld hour is %ld min %ld sec %ld  ",(long)months,(long)days,(long)hours,(long)minute,(long)second);

    sleepHours.text=[NSString stringWithFormat:@"Hour %ld Min %ld Sec %ld",(long)hours,(long)minute,(long)second];
    }
}
巡山小妖精 2024-09-03 20:48:05

尝试此类别:

@interface NSDate (DateUtils)

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate; 

@end

@implementation NSDate (DateUtils)

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate
{

    NSCalendar *calendar = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *components = [calendar components:NSCalendarUnitDay
                                                fromDate:self
                                                  toDate:aDate options:kNilOptions];

    return [components day];

}

@end

您可以通过添加导入来使用此类别:

#import "NSDate+DateUtils.h"

并从代码中调用它:

NSInteger days = [myDate numberOfDaysUntilDay:someOtherDate];

Try this category:

@interface NSDate (DateUtils)

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate; 

@end

@implementation NSDate (DateUtils)

-(NSInteger)numberOfDaysUntilDay:(NSDate *)aDate
{

    NSCalendar *calendar = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDateComponents *components = [calendar components:NSCalendarUnitDay
                                                fromDate:self
                                                  toDate:aDate options:kNilOptions];

    return [components day];

}

@end

You can use this category by adding an import:

#import "NSDate+DateUtils.h"

And call it from your code:

NSInteger days = [myDate numberOfDaysUntilDay:someOtherDate];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文