通过将日期与日历日期进行比较来加载即将发生的事件

     2023-03-12     273

关键词:

【中文标题】通过将日期与日历日期进行比较来加载即将发生的事件【英文标题】:loading upcoming events by comparing their dates with the calendar date 【发布时间】:2014-02-06 00:22:28 【问题描述】:

我在网上找到了以下代码,用于比较两个日期(日历的日期和另一个日期)我想要帮助的是修改此代码,以便它将日历日期与日期所在的事件的日期进行比较这是 NSArray (json 文件)中每个事件的关键.. 还有我以后如何将它与 NSPredicate 一起使用,以便我可以只加载带有组件的事件(两个日期之间的天数差异),因为我去的时间至少超过 1 天当用户单击 UIButton 调用未来事件时,应该加载所有未来事件。我非常感谢任何帮助和代码示例,因为我对目标 C 和 Xcode 非常陌生。谢谢。

@implementation HomeViewController 
    NSArray *_events;


- (BOOL)isSameDay:(NSDate*)date

    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDate *currDate = [NSDate date];
    //date = [_events objectAtIndex:date];

    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date];
    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:currDate];
    NSDateComponents *components = [calendar components:unitFlags
                                               fromDate:currDate
                                                 toDate:date
                                                options:0];

    NSLog(@"Days between dates: %@", components);

    return [comp1 day]   == [comp2 day] &&
    [comp1 month] == [comp2 month] &&
    [comp1 year]  == [comp2 year];

【问题讨论】:

【参考方案1】:

要获取某个日期从现在开始的剩余天数,可以使用以下方法:

-(long)daysRemaining:(NSDate*) date

    NSDate *now = [NSDate date];
    NSTimeInterval dateDiff = [date timeIntervalSinceNow] - [now timeIntervalSinceNow];
    CGFloat numberOfDaysRemaining = (dateDiff/(60*60*24));
    return ceil(numberOfDaysRemaining);

所以你可以像这样调用来获取剩余天数:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *dateToCompare = [dateFormatter dateFromString: @"2014-02-08"];

long numberDays = [self daysRemaining:dateToCompare];

对于这种情况,结果是剩余 2 天。请注意,否定结果表示已过去 n 天。

要过滤数组(剩余 2 天的事件)并复制它:

NSArray* dates = [[NSArray alloc] initWithObjects:
    [dateFormatter dateFromString: @"2014-02-08"],
    [dateFormatter dateFromString: @"2014-02-05"],
    [dateFormatter dateFromString: @"2014-02-10"],
    [dateFormatter dateFromString: @"2014-02-08"], nil];

NSArray *filteredArray = [dates filteredArrayUsingPredicate:
    [NSPredicate predicateWithBlock:
        ^BOOL(id evaluatedObject, NSDictionary *bindings) 
            long daysRemaining = [self daysRemaining:(NSDate*)evaluatedObject];
            return daysRemaining == 2; // if someMethod returns YES, the object is kept
        
    ]];

就地过滤 NSMutableArray:

[mutableArray filterUsingPredicate:[NSPredicate predicateWithBlock:
    ^BOOL(id evaluatedObject, NSDictionary *bindings) 
        long daysRemaining = [self daysRemaining:(NSDate*)evaluatedObject];
        return daysRemaining == 2; // if someMethod returns YES, the object is kept
    
]];

【讨论】:

谢谢Felipe,所以你说我必须将所有这些代码添加到我的程序中,以便Future UIButton 加载未来的事件??所以不需要使用 NSCalendar 或 components:fromDate:toDate:options:0 函数??我不明白你为什么要返回 daysRemaining == 2 ?就我而言,我认为它应该是 1 或更大!!.. Future UIButton 需要加载数据(如果尚未加载),然后使用谓词代码对其进行过滤。如果您有 NSDate 对象或日期字符串,则不需要使用 NSCalendar。要过滤所有未来的事件,正确的是 return (daysRemaining > 0)。因此,如果是未来事件,则条件将返回 YES,并且将列出该事件。 好的,我明白了,但我现在有问题,我该如何修改它,以便它可以在我的 json 文件中包含每个事件的日期键 --> NSDate *dateToCompare = [dateFormatter dateFromString: @" 2014-02-08"];还有这行代码中 now 的值是什么 --> NSDate *now = [NSDate date]; ^BOOL(id evaluateObject, NSDictionary *bindings) 中的 --> (id evaluateObject) 是什么意思?? 也许你有一个可以解析成字典数组的json文件,其中数组中的每个字典元素都是一个事件,字典中的每个元素都是事件的属性,其中一个属性必须是日期。虽然这个属性是一个字符串,但是你可以在 Predicate 的代码块中使用 [dateFormatter dateFromString: StringProperty] 方法解析成 NSDate。 ^BOOL(id evaluateObject, NSDictionary *bindings) 是为数组中的每个元素调用的代码块,将元素传递到评估对象并接收一个布尔值,指示该元素是否存在包含在过滤后的数组中。因此,对剩余天数 0 表示“是”,表示谓词可以维护该元素。【参考方案2】:
  [displayedEvents addObjectsFromArray:[_events filteredArrayUsingPredicate:
                          [NSPredicate predicateWithBlock:
                           ^BOOL(Events * event, NSDictionary *bindings) 
                               [dateFormatter dateFromString: event.date];
                               long daysRemaining = [self daysRemaining: (NSDate*)event.date];
                               return daysRemaining > 1; // if someMethod returns YES, the object is kept
                           
  ]]];

【讨论】:

通过将日期列与两个参考列进行比较来计算从日期开始的年期

】通过将日期列与两个参考列进行比较来计算从日期开始的年期【英文标题】:Computingyearperiodfromdatebycomparingdatecolumnwithtworeferencecolumns【发布时间】:2021-07-1315:13:50【问题描述】:我正在为我参与的项目做一些数据准备工作。我... 查看详情

通过将日期索引与当前日期进行比较来删除集合中的所有文档

】通过将日期索引与当前日期进行比较来删除集合中的所有文档【英文标题】:Removingalldocumentsinacollectionbycomparingdateindexwithcurrentdate【发布时间】:2019-11-1612:40:14【问题描述】:问题总结我希望对此有信心实现,因为我真的不知... 查看详情

谷歌数据工作室日期范围 - 添加即将发生的事件

】谷歌数据工作室日期范围-添加即将发生的事件【英文标题】:GoogledatastudioDaterange-Addupcomingevent【发布时间】:2018-10-0814:07:08【问题描述】:是否有可能根据在数据工作室中选择的>=日期的日期范围选择所有值?或者这仍然不... 查看详情

未在 TableView 中重新加载正确的数据

...问题描述】:我编写了这段代码来重新加载UItableView,其日期与用户单击主视图控制器中今天的事件UIButton时的当前日期相同,但问题是下面的代码没有重新加载正确的数据(它只是给出了初始数据,没有将事件的日期与iPhone中... 查看详情

php即将发生的事件-将日期转换为整数(代码片段)

查看详情

如何将 Fullcalendar 插件中的日期与日期数组进行比较

】如何将Fullcalendar插件中的日期与日期数组进行比较【英文标题】:HowtocomparedatesinFullcalendarpluginwithanarrayofdates【发布时间】:2014-10-1203:09:40【问题描述】:我想将数组中的一组日期与日历中的所有日期进行比较。这是我写的代... 查看详情

通过与javascript中的今天日期进行比较来允许今天的日期和未来的日期

】通过与javascript中的今天日期进行比较来允许今天的日期和未来的日期【英文标题】:Allowtoday\'sdateandfuturedatebycomparingwithtoday\'sdateinjavascript【发布时间】:2013-03-2718:34:10【问题描述】:我有一个输入表格,我可以在其中允许今... 查看详情

如何通过将一行与其下一行进行比较来填充新列

】如何通过将一行与其下一行进行比较来填充新列【英文标题】:Howtopopulatenewcolumnbycomparingonerowwithitsnextrow【发布时间】:2021-10-0623:02:07【问题描述】:我发现很难编写查询以获得所需的输出。我需要获取两个连续行之间的日期... 查看详情

将日期和时间与 MySQL 中的当前时间进行比较

】将日期和时间与MySQL中的当前时间进行比较【英文标题】:ComparedateandtimetocurrenttimeinMySQL【发布时间】:2021-10-0302:49:58【问题描述】:我正在使用php开发办公室管理系统,我想创建两个约会数据表。一个将按降序显示以前的约... 查看详情

如何通过与 Flutter Cloud Firestore 插件中的日期进行比较来获取记录?

】如何通过与FlutterCloudFirestore插件中的日期进行比较来获取记录?【英文标题】:Howtofetchrecordsbycomparingwithdateinfluttercloudfirestoreplugin?【发布时间】:2018-11-1218:49:03【问题描述】:在使用firebasecloudfirestore存储我的所有文档的Flutter... 查看详情

我如何将当前日期与日期选择器中的用户输入日期进行比较

】我如何将当前日期与日期选择器中的用户输入日期进行比较【英文标题】:howdoicomparecurrentdatewithuserinputdatefromdatepicker【发布时间】:2013-06-1211:55:48【问题描述】:我试图限制日期和时间。我希望如果用户尝试将日期设置为小... 查看详情

将修改后的文件日期与批处理文件中的当前日期进行比较

】将修改后的文件日期与批处理文件中的当前日期进行比较【英文标题】:Comparingamodifiedfiledatewiththecurrentdateinabatchfile【发布时间】:2012-03-1003:01:04【问题描述】:我需要编写一个批处理文件来做一些事情最初我认为我的问题很... 查看详情

Django 模板 - 将日期与今天进行比较

】Django模板-将日期与今天进行比较【英文标题】:Djangotemplate-comparedatetotoday【发布时间】:2013-04-0615:42:04【问题描述】:我正在尝试创建一个简单的IF函数来检查项目的日期是否等于今天。不幸的是,我无法让它工作。我基本上... 查看详情

php/Codeigniter——如何通过排除时间来仅比较日期

】php/Codeigniter——如何通过排除时间来仅比较日期【英文标题】:php/Codeigniter--Howtocompareonlydatebyexcludingtime【发布时间】:2013-09-1710:41:05【问题描述】:我的数据库表中有一个字段为creater_date作为日期时间,并且值以2013-09-1302:12:4... 查看详情

将日期或日期时间加载到日期维度

】将日期或日期时间加载到日期维度【英文标题】:Loadingdateordatetimeintodatedimension【发布时间】:2017-05-1616:19:14【问题描述】:假设我有一个日期维度,并且根据我的业务需求,我知道我需要做的最细致的工作是检查事件发生的... 查看详情

从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?

...。此日期字段的数据保存为字符串。当执行查询时,我想通过firebase中的 查看详情

如何将今天的日期与 oledb 日期进行比较?请帮忙

】如何将今天的日期与oledb日期进行比较?请帮忙【英文标题】:howtoComparetodaysdatewitholedbdate??pleasehelp【发布时间】:2009-12-0908:33:15【问题描述】:我在这里需要一些帮助。需要知道如何将数据库中的日期与今天的日期进行比较... 查看详情

java示例代码_将当前日期与用户输入的日期进行比较

java示例代码_将当前日期与用户输入的日期进行比较 查看详情