2017-06-08 1 views
1

J'essaie d'obtenir la différence dans deux objets Date. Je sais comment le faire au fond, qui est comme ceci:Comment calculer la différence en jours pour deux Date dans Swift que les jours commencent à 6 heures au lieu de 0

 let date = Date() 
     let dateFormatter = DateFormatter() 
     dateFormatter.locale = Locale.current 

     print(count) 
     // print(history[count - 1].value(forKey: "multipleURLs") as! [String]) 
     let latestDate = history[count - 1].value(forKey: "date") as! Date 
     let calendar = Calendar.current 

     let components = calendar.dateComponents([.year, .month, .day, .hour], from: date) 

     let nowDate = calendar.startOfDay(for: date) 
     let lastDate = calendar.startOfDay(for: latestDate) 

     let diffDateComponent = (calendar as NSCalendar).components([NSCalendar.Unit.year, NSCalendar.Unit.month, NSCalendar.Unit.day], from: lastDate, to: nowDate, options: NSCalendar.Options.init(rawValue: 0)) 

     print("Status Checked" + String(describing: diffDateComponent.day)) 

Mais je suis en train d'obtenir le résultat en début de journée de 6 heures du matin au lieu de 0.

Je a fait quelque chose comme ceci:

 let nowDate = calendar.startOfDay(for: date.addingTimeInterval(-3600)) 
     let lastDate = calendar.startOfDay(for: latestDate.addingTimeInterval(-3600)) 

Mais cela ne semble pas fonctionner, quelqu'un peut-il m'aider avec ceci?

Répondre

0

gars Merci, j'ai enfin compris. Au cas où quelqu'un en aurait besoin, voici comment c'est fait:

 let date = Date() 
     let dateFormatter = DateFormatter() 
     dateFormatter.locale = Locale.current 

     let latestDate = history[count - 1].value(forKey: "date") as! Date 
     let calendar = Calendar.current 

     let nowDate = calendar.date(byAdding: .hour, value: -6, to: date) 
     let lastDate = calendar.date(byAdding: .hour, value: -6, to: latestDate) 

     let finalNowDate = calendar.startOfDay(for: nowDate!) 
     let finalLastDate = calendar.startOfDay(for: lastDate!) 

     let diffDateComponent = calendar.dateComponents([.day], from: finalLastDate, to: finalNowDate) 
     print("dif\(diffDateComponent.day)") 
+0

Pourquoi remontez-vous le temps 6 heures, puis le début de la journée? Vous pourriez revenir à un jour précédent si la date est avant 6 heures. Peut-être que votre question ne reflète pas ce que vous tentez d'accomplir parce que je ne vois pas comment cela va faire ce que vous demandez. Aussi, évitez de forcer vos valeurs 'Optional' avec'! '. Cela peut fonctionner la plupart du temps, mais vous demandez des plantages à l'arrêt. Testez et dépliez-les en toute sécurité. – ColGraff

+0

Cool merci l'homme: P – JoshJoshJosh

0

Cela va régler chaque date à 6 heures (dans la configuration locale du Date):

import Foundation 

// set up dates 
let calendar = Calendar.current 
let date = Date() 
if let latestDate = calendar.date(byAdding: .day, value: -5, to: date) { 

    // set each day to 6 AM 
    if let nowDate = calendar.date(bySettingHour: 6, minute: 0, second: 0, of: date  ), 
    let lastDate = calendar.date(bySettingHour: 6, minute: 0, second: 0, of: latestDate) { 

    print( date.description(with: .current), 
      nowDate.description(with: .current), 
      lastDate.description(with: .current), 
      separator: "\n") 

    // calculate difference in days 
    if let days = calendar.dateComponents([.day], from: lastDate, to: nowDate).day { 
     print("Days since: \(days)") 
    } 
    } 
} 

// Thursday, June 8, 2017 at 7:59:42 AM Eastern Daylight Time 
// Thursday, June 8, 2017 at 6:00:00 AM Eastern Daylight Time 
// Saturday, June 3, 2017 at 6:00:00 AM Eastern Daylight Time 
// Days since: 5