检查日期落在2日期间

问题描述 投票:20回答:5

我有这样的代码,其中将一个字符串转换日期对象

let date2 = KeysData[indexPath.row]["starttime"] as? String

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

if let date = dateFormatter.dateFromString(date2!) {
   println(date)          
}

我想知道如果当前日期落在2天我在阵列startdateendate拿到之间

swift
5个回答
53
投票

斯威夫特2

为了更好的答案见Swift ≧ 3

您已经有在KeysDataNSDate您的日期字符串转换的代码。假设你有startdateenddate两个日期,所有你所要做的就是检查当前日期之间:

let startDate = ...
let endDate = ...

NSDate().isBetween(date: startDate, andDate: endDate)

extension NSDate {
    func isBetweeen(date date1: NSDate, andDate date2: NSDate) -> Bool {
        return date1.compare(self) == self.compare(date2)
    }
}

编辑:如果要执行一个包含范围检查,使用条件:

 extension NSDate {
    func isBetween(date date1: NSDate, andDate date2: NSDate) -> Bool {
        return date1.compare(self).rawValue * self.compare(date2).rawValue >= 0
    }
}

105
投票

斯威夫特≧3

斯威夫特3使这是一个容易得多。

let fallsBetween = (startDate ... endDate).contains(Date())

现在NSDate桥接到值类型DateDate符合Comparable我们就可以形成一个ClosedRange<Date>并使用contains方法,看是否包含在当前的日期。

警告:endDate必须大于或等于startDate。否则,范围不能形成和代码将与fatalError崩溃。

这是安全的:

extension Date {
    func isBetween(_ date1: Date, and date2: Date) -> Bool {
        return (min(date1, date2) ... max(date1, date2)).contains(self)
    }
}

5
投票

对于雨燕4.2我用基于上述回答这个扩展:

extension Date {
    func isBetween(_ date1: Date, and date2: Date) -> Bool {
        return (min(date1, date2) ... max(date1, date2)) ~= self
    }

不过要小心。如果这个扩展并不包括你的开始日期(DATE1),然后检查您的日期,时间。可能是你需要削减从日期的时间来修复它。例如,像这样:

let myDateWithoutTime = Calendar.current.startOfDay(for: myDate)

2
投票
extension Date
{
    func isBetween(startDate:Date, endDate:Date)->Bool
    {
         return (startDate.compare(self) == .orderedAscending) && (endDate.compare(self) == .orderedDescending)
    }
}

-1
投票
extension Date {

    func isBetweeen(date date1: Date, andDate date2: Date) -> Bool {
        return date1.timeIntervalSince1970 < self.timeIntervalSince1970 && date2.timeIntervalSince1970 > self.timeIntervalSince1970
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.