比较NSDate

3

我想比较两个NSDate,但每个日期都显示为“早于”todaysDate。有什么想法吗?

let compareResult = self.todaysDate.compare(self.date)

if compareResult == NSComparisonResult.OrderedDescending {
println("Today is later than date2")
} else {
println("Future")
}

获取"todaysDate"
let todaysDate = NSDate()
let calendar = NSCalendar.currentCalendar()
    let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay, fromDate: todaysDate)
let hour = components.hour
let minutes = components.minute
let month = components.month
let year = components.year
let day = components.day
println(todaysDate)

这个打印是:

2014-11-12 14:48:48 +0000

打印 "date" 的结果是:

2014-10-24 07:24:41 +0000

这是在Parse.com服务器上的内容。

谢谢


请问您能展示一下设置 self.todaysDateself.date 的代码行吗? - Ron Fessler
let todaysDate = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay,fromDate:todaysDate) let hour = components.hour let minutes = components.minute let month = components.month let year = components.year let day = components.day 另一个日期从Parse.com检索 - Tom Coomer
2
println(self.date)println(self.todaysDate) 的输出将会很有帮助。 - Martin R
1
你有检查每个日期是否早于今天的日期吗?你提供的示例没有显示问题。 - Ron Fessler
3个回答

10

如果您希望支持==<><=>=用于NSDate,只需在某处声明:

public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs === rhs || lhs.compare(rhs) == .OrderedSame
}

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.compare(rhs) == .OrderedAscending
}

extension NSDate: Comparable { }

实现==<Comparable能够推导出其他比较运算符。

用法:

let date1 = NSDate()
let date2 = NSDate()

println(date2 > date1) // true
println(date2 < date1) // false
println(date2 == date2) // true

10

我认为你可能把compare的结果理解反了。看一下这个。每一个asserts都通过了:

let today = NSDate()
let tomorrow = today.dateByAddingTimeInterval(24 * 60 * 60)
let yesterday = today.dateByAddingTimeInterval(-24 * 60 * 60)

assert(today.compare(tomorrow)  == .OrderedAscending)     // today < tomorrow
assert(today.compare(yesterday) == .OrderedDescending)    // today > yesterday
assert(today.compare(today)     == .OrderedSame)          // today == today

1

试试这个!你可以通过将其分配给strdate来检查不同的日期。

    todaysDate = NSDate()
    println(todaysDate)

    var dateformmatter:NSDateFormatter = NSDateFormatter()
    dateformmatter.dateFormat = "yyyy-MM-dd HH:mm:ss";
    let strdate:NSString = "2014-12-12 07:24:41";
    date = dateformmatter.dateFromString(strdate)!;
    println(date)

    let compareResult = todaysDate.compare(date)

    if compareResult == NSComparisonResult.OrderedDescending {
        println("Today is later than date2")
    } else {
        println("Future")
    }

每个结果都返回未来。你知道这是为什么吗? - Tom Coomer
不!你必须将strdate的值更改为不同的日期!例如,将strdate设置为“2014-10-10 07:24:41”。 - Saurabh Prajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接