web-dev-qa-db-fra.com

Comment comparer deux dates (NSDate) dans Swift 3 et obtenir les jours entre elles?

Comment comparer deux dates dans Swift 3? J'ai trouvé de nombreuses solutions pour d'autres versions de Swift, mais elles ne fonctionnent pas pour moi.

let clickedDay:String = currentcell.DayLabel.text!
    let currentDate = NSDate()
    let currentDay = "" //want the current day
    let dateFormatter = DateFormatter()        
    var dateAsString = ""        
    if Int(clickedDay)! < 10 {            
        dateAsString = "0" + clickedDay + "-11-2016 GMT"
    }
    else {            
        dateAsString = clickedDay + "-11-2016 GMT"
    }

    dateFormatter.dateFormat = "dd-MM-yyyy zzz"
    let clickedDate = dateFormatter.date(from: dateAsString)        
    if currentDate as Date >= clickedDate! as Date {

        return true
    }
    else {
        //Want to get the days between the currentDate and clickedDate
        let daysLeft = ""
    }

Je compare les dates de remorquage, mais je veux les jours qui sont entre ces dates de remorquage . Quelqu'un peut-il m'aider à pls? Merci et salue 

Ajouté: Si j'ai la date du 22.11.2016 et la date du jour (maintenant le 18.11.2016), je veux les jours entre les deux (dans ce cas 4)

7
morri_94

Faites simplement une extension de Date comme ceci et obtenez la différence en jours.

extension Date {
    func daysBetweenDate(toDate: Date) -> Int {
        let components = Calendar.current.dateComponents([.day], from: self, to: toDate)
        return components.day ?? 0
    }
}

Maintenant, utilisez cette extension comme ceci

let numOfDays = fromDate.daysBetweenDate(toDate: toDate)

Vous pouvez utiliser DateFormatter pour convertir String en Date de cette manière.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
dateFormatter.timeZone = TimeZone(abbreviation: "GMT")
let date = dateFormatter.date(from: "18-11-2016")
12
Nirav D

Essaye celui-là 

let startDateComparisionResult:ComparisonResult = currentDate.compare(clickedDate! as NSDate)

if startDateComparisionResult == ComparisonResult.orderedAscending
{
    // Current date is smaller than end date.
}
else if startDateComparisionResult == ComparisonResult.orderedDescending
{
    // Current date is greater than end date.
}
else if startDateComparisionResult == ComparisonResult.orderedSame
{
    // Current date and end date are same
}
2
Sapana Ranipa

Utilisez cette fonction pour obtenir toutes les dates intermédiaires entre deux dates. Il vous suffit de vérifier si la date de péremption (date finale) est supérieure à la date de péremption (première date), alors l'ordre vaut +1, sinon l'ordre -1 

func selectDates(from upDate : Date, to downDate : Date, order : Int){
        var selectDate = Calendar.current.date(byAdding: .day, value: order, to: upDate)!
        while compareDate(dateInitial: selectDate, dateFinal: downDate) != true{
            print(" intermediate date is \(selectDate)")
            selectDate = Calendar.current.date(byAdding: .day, value: order, to: selectDate)!
        }
        print("*** intermediate dates are selected ***")

    }


func compareDate(dateInitial:Date, dateFinal:Date) -> Bool {
        let order = Calendar.current.compare(dateInitial, to: dateFinal, toGranularity: .day)
        switch order {
        case .orderedSame:
            return true
        default:
            return false
        }
    }
2
Himanshu

Essayer:

let days=Calendar.current.dateComponents([.day], from: date_1, to: date_2)
let nb_days=days.day
1
Marie Dm