【问题标题】:Comparing an NSDate to [NSDate date]将 NSDate 与 [NSDate 日期] 进行比较
【发布时间】:2011-01-16 13:16:33
【问题描述】:

我试图强制用户使用日期选择器选择未来的日期。我显然使用了 compare: 方法,但是,当我执行以下代码时,即使它与 [NSDate date] 的日期相同,它也会告诉执行 if 语句。这是我的代码:

    if ([datePicker.date compare:[NSDate date]] == NSOrderedAscending) // If the picked date is earlier than today
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hmm, this date is earlier than today" 
                                                    message:@"The date you've selected is earlier than today's date, please pick another" 
                                                   delegate:nil  
                                          cancelButtonTitle:@"Okay, I'll pick another" 
                                          otherButtonTitles:nil];
    // Show the alert
    [alert show];

    // Release the alert
    [alert release];
}

【问题讨论】:

  • 您是否尝试过使用laterDate:(或earlierDate:)进行比较?
  • 如果您 NSLog 日期只是为了查看它是否具有正确的值会发生什么。

标签: iphone datepicker compare nsdate uidatepicker


【解决方案1】:

你可以使用

[datePicker.date timeIntervalSinceNow]

它返回一个 NSTimeInterval(只是一个双精度的 typedef,以秒为单位),对于未来是正数,对于过去是负数。

正如文档所说,compare 提供亚秒级比较,因此您可以使用它来强制他们的日期推迟一整天(而不是仅仅在未来的某个时间)。

【讨论】:

    【解决方案2】:

    我不知道你的问题的答案,但你可以如何规避它。

    只需使用 UIDatePickerminimumDate 属性,这甚至是一种更简洁的方法。

    【讨论】:

    • 这很好用,在 UIDatePicker 的 API 中没有看到,谢谢。
    【解决方案3】:

    一个 NSDate 对象同时包含一个日期和一个时间,因此有很多日期在同一天,可以在同一天的另一个日期之前或之后。

    date 类方法返回具有当前日期日期和时间的日期对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 2014-11-29
      • 2014-08-23
      • 2012-05-30
      相关资源
      最近更新 更多