2014-12-07 22 views
11

Tôi có một ngày mà tôi cần phải chia nhỏ trong một số thành phần. ví dụ:Làm việc với các thành phần NSDate trong Swift

let components = NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitHour 
let date = calendar.components(components, fromDate: aDate, toDate: NSDate(), options: nil) 
var dateToPrint = "\(date.day) days \(date.hour) hours" 

dateToPrint sẽ là số ngày và giờ từ aDate cho đến bây giờ. Nhưng nếu tôi muốn số tuần thay vì ngày

let components = NSCalendarUnit.CalendarUnitWeek | NSCalendarUnit.CalendarUnitHour 
let date = calendar.components(components, fromDate: aDate, toDate: NSDate(), options: nil) 
var dateToPrint = "\(date.week) weeks \(date.hour) hours" 

ngày giờ không tồn tại. Vậy làm thế nào tôi có thể giải quyết vấn đề này?

+1

Look. Trước hết, không có NSDate trong câu chuyện này. Thứ hai, đọc tài liệu; Các phần tử NSDateComponents 'week' không phải là những gì bạn nghĩ, và trong mọi trường hợp, nó không còn được dùng nữa. – matt

+0

Tôi chỉ muốn chia thành phần một khoảng thời gian của hai NSDate. Phương thức 'calendar.components (unitFlags: NSCalendarUnit, fromDate: NSDate !, toDate: NSDate !, options: NSCalendarOptions)' lấy làm đối số hai ** NSDate **. Tôi thấy rằng 'tuần 'đã không được chấp nhận thats lý do tại sao tôi hỏi ở đây một cách khác để đếm tuần – Giorgio

Trả lời

18

Xcode 8.3.2 • Swift 3,1

extension Date { 
    func xDays(_ x: Int) -> Date { 
     return Calendar.current.date(byAdding: .day, value: x, to: self)! 
    } 
    func xWeeks(_ x: Int) -> Date { 
     return Calendar.current.date(byAdding: .weekOfYear, value: x, to: self)! 
    } 
    var weeksHoursFromToday: DateComponents { 
     return Calendar.current.dateComponents([.weekOfYear, .hour], from: self, to: Date()) 
    } 
    var relativeDateString: String { 
     var result = "" 
     if let weeks = weeksHoursFromToday.weekOfYear, 
      let hours = weeksHoursFromToday.hour, 
      weeks > 0 { 
      result += "\(weeks) week" 
      if weeks > 1 { result += "s" } 
      if hours > 0 { result += " and " } 
     } 
     if let hours = weeksHoursFromToday.hour, hours > 0 { 
      result += "\(hours) hour" 
      if hours > 1 { result += "s" } 
     } 
     return result 
    } 
} 

let today  = Date()     // "May 1, 2017, 9:29 PM" 
let yesterday = Date().xDays(-1)  // "Apr 30, 2017, 9:29 PM" 
let twoWeeksAgo = Date().xWeeks(-2)  // "Apr 17, 2017, 9:29 PM" 
let anotherDate = DateComponents(calendar: .current, year: 2013, month: 12, day: 4).date! // "Dec 4, 2013, 12:00 AM" 
let anotherDate2 = DateComponents(calendar: .current, year: 2012, month: 12, day: 3).date! // "Dec 3, 2012, 12:00 AM" 


yesterday.relativeDateString   // "24 hours" 
twoWeeksAgo.relativeDateString  // "2 weeks" 
anotherDate.relativeDateString  // "177 weeks and 141 hours" 
anotherDate2.relativeDateString  // "230 weeks and 21 hours" 
yesterday.relativeDateString   // "24 hours" 
twoWeeksAgo.relativeDateString  // "2 weeks" 
anotherDate.relativeDateString    // "177 weeks and 141 hours" 
anotherDate2.relativeDateString    // "230 weeks and 21 hours" 

0

Không chắc chắn bạn muốn, nhưng có weekday, weekdayOrdinal, weekOfMonthweekOfYear. (week không được chấp nhận.)

1

Bạn sẽ cần thực hiện một biến khác gọi là "lịch" (đối tượng NSCalendar) và sử dụng phương thức init "currentCalendar". Khi bạn đã xác định đối tượng lịch, hãy gọi phương thức theo lịch phạm viOfUnit: NSWeekCalendarUnit inUnit: NSMonthCalendarUnit forDate: date. Sau đó, tạo một NSInteger có tên là amountOfWeeks bằng phạm vi hàm trả về ở trên. Độ dài của dãy mà hàm trả về sẽ là số tuần trong tháng đó.

2

tôi thích API trong dung dịch của Leo và sử dụng nó. Tuy nhiên tôi gặp vấn đề khi tôi chạy nó (Jun 13, 2015 9:33 AM PST). Các triệu chứng là:

  1. Khi ngày là trong tương lai, xFromToday chức năng đã trở kết quả cho - (t-delta) (ví dụ trong 1 tháng trong thời gian tới các chức năng XFromToday sẽ trở lại (0, -4, -29, -719, -43199) cho x = (tháng, tuần, ngày, giờ, phút). Chuỗi relativeDates sẽ trả về "1 tuần kể từ hôm nay"

  2. Khi ngày ở trong quá khứ, kết quả sẽ là cho -t, ngoại trừ cho chuỗi ngày tương đối. Ví dụ, trong một tháng trước đây, tôi sẽ nhận được (1, 4, 31, 744, 44640). chuỗi ngày là: "4 tuần và 744 giờ"

tôi không thể dán kết quả thử nghiệm do bảo mật, nhưng mã với NSDate.test() được dán. Nó cũng có vài thứ khác mượn từ một bài đăng khác (được trích dẫn trong mã) và một số công cụ định dạng mà tôi đã viết.

import Foundation 

// https://stackoverflow.com/questions/27339072/working-with-nsdate-components-in-swift 

// **** Use with caution may not do what you expect. See the stackoverflow post above. ******* 

public extension NSDate { 


    func xDays(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitDay, value: x, toDate: self, options: nil)! 
    } 
    func xWeeks(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitWeekOfYear, value: x, toDate: self, options: nil)! 
    } 
    func xMonths(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitMonth, value: x, toDate: self, options: nil)! 
    } 
    func xMins(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitMinute, value: x, toDate: self, options: nil)! 
    } 
    func xHours(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitHour, value: x, toDate: self, options: nil)! 
    } 
    var hoursFromToday: Int{ 
     return NSCalendar.currentCalendar().components(.CalendarUnitHour, fromDate: self, toDate: NSDate(), options: nil).hour 
    } 
    var weeksFromToday: Int{ 
     return NSCalendar.currentCalendar().components(.CalendarUnitWeekOfYear, fromDate: self, toDate: NSDate(), options: nil).weekOfYear 
    } 
    var daysFromToday: Int{ 
     return NSCalendar.currentCalendar().components(.CalendarUnitDay, fromDate: self, toDate: NSDate(), options: nil).day 
    } 
    var monthsFromToday: Int{ 
     return NSCalendar.currentCalendar().components(.CalendarUnitMonth, fromDate: self, toDate: NSDate(), options: nil).month 
    } 
    var minsFromToday: Int{ 
     return NSCalendar.currentCalendar().components(.CalendarUnitMinute, fromDate: self, toDate: NSDate(), options: nil).minute 
    } 
    var relativeDateString: String { 
     if weeksFromToday > 0 { return weeksFromToday > 1 ? "\(weeksFromToday) weeks and \(hoursFromToday) hours" : "\(weeksFromToday) week and \(hoursFromToday) hours" } 
     if hoursFromToday > 0 { return hoursFromToday > 1 ? "\(hoursFromToday) hours" : "\(hoursFromToday) hour" } 
     return "" 
    } 

    //Date Comparisions 
    //https://stackoverflow.com/questions/26198526/nsdate-comparison-using-swift 


    func isGreaterThanDate(dateToCompare : NSDate) -> Bool 
    { 
     //Declare Variables 
     var isGreater = false 

     //Compare Values 
     if self.compare(dateToCompare) == NSComparisonResult.OrderedDescending 
     { 
      isGreater = true 
     } 

     //Return Result 
     return isGreater 
    } 

    func isLessThanDate(dateToCompare : NSDate) -> Bool 
    { 
     //Declare Variables 
     var isLess = false 

     //Compare Values 
     if self.compare(dateToCompare) == NSComparisonResult.OrderedAscending 
     { 
      isLess = true 
     } 

     //Return Result 
     return isLess 
    } 




    // Date printing converstions 




    var dayMonthYear: String { 
     let dateMonthYearFormatter: NSDateFormatter = NSDateFormatter() 
     let currentLocale: NSLocale = NSLocale.currentLocale() 
     let dateMonthYearFormatString: NSString! = NSDateFormatter.dateFormatFromTemplate("EdMMMyyyy",options: 0, locale: currentLocale) 
     dateMonthYearFormatter.dateFormat = dateMonthYearFormatString as! String 
     return dateMonthYearFormatter.stringFromDate(self) 
    } 

    var timeDayMonthYear: String { 
     let dateMonthYearFormatter: NSDateFormatter = NSDateFormatter() 
     let currentLocale: NSLocale = NSLocale.currentLocale() 
     let dateMonthYearFormatString: NSString! = NSDateFormatter.dateFormatFromTemplate("EdMMMyyyy' ' HH':'mm",options: 0, locale: currentLocale) 
     dateMonthYearFormatter.dateFormat = dateMonthYearFormatString as! String 
     return dateMonthYearFormatter.stringFromDate(self) 
    } 


    var hourMin: String { 
     let hourMinFormatter = NSDateFormatter(); 
     hourMinFormatter.dateFormat = "HH:mm" 
     return hourMinFormatter.stringFromDate(self) 
    } 

    static func rfc3339DateFormatter() -> NSDateFormatter { 
     let rfc3339DateFormatterRet = NSDateFormatter() 
     let enUSPOSIXLocale: NSLocale = NSLocale(localeIdentifier: "en_US_POSIX") 
     rfc3339DateFormatterRet.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'" 
     rfc3339DateFormatterRet.locale = enUSPOSIXLocale 
     rfc3339DateFormatterRet.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
     return rfc3339DateFormatterRet 
    } 


    var rfcString: String { 
     return NSDate.rfc3339DateFormatter().stringFromDate(self) 
    } 
    func rfcDate(rfcString: String) -> NSDate { 
    return NSDate.rfc3339DateFormatter().dateFromString(rfcString)! 
    } 

    func changeDate(toDate: NSDate) -> NSDate { 

     let rfcToDate = toDate.rfcString 
     let rfcSelf = self.rfcString 
     let toDateArray : [String] = rfcToDate.componentsSeparatedByString("T") 
     let selfArray : [String] = rfcSelf.componentsSeparatedByString("T") 
     return rfcDate(toDateArray[0]+"T"+selfArray[1]) 

    } 

    static func test(months: Int = 0, weeks: Int = 0, days: Int = 0, hrs: Int = 0, mins: Int = 0) { 

     NSLog("****************** Start Testing of NSDate **************************") 
     NSLog("Inputs: months:\(months) weeks:\(weeks) days:\(days) hrs: \(hrs) mins: \(mins)") 
     var today = NSDate() 
     NSLog("Today is: \(today.timeDayMonthYear)") 

     var monthsFromToday = today.xMonths(months) 
     NSLog("** \(months) months from today: \(monthsFromToday.timeDayMonthYear)") 
     NSLog("monthsFromToday returns: \(monthsFromToday.monthsFromToday)"); 
     NSLog("weeksFromToday returns: \(monthsFromToday.weeksFromToday)"); 
     NSLog("daysFromToday returns: \(monthsFromToday.daysFromToday)"); 
     NSLog("hoursFromToday returns: \(monthsFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(monthsFromToday.minsFromToday)"); 
     NSLog("relativeDateString returns: \(monthsFromToday.relativeDateString)") 

     var weeksFromToday = today.xWeeks(weeks) 
     NSLog("** \(weeks) weeks from today: \(weeksFromToday.timeDayMonthYear)") 
     NSLog("weeksFromToday returns: \(weeksFromToday.weeksFromToday)"); 
     NSLog("relativeDateString returns: \(weeksFromToday.relativeDateString)") 


     var daysFromToday = today.xDays(days) 
     NSLog("** \(days) days from today: \(daysFromToday.timeDayMonthYear)") 
     NSLog("daysFromToday returns: \(daysFromToday.daysFromToday)"); 
     NSLog("relativeDateString returns: \(daysFromToday.relativeDateString)") 

     var hrsFromToday = today.xHours(hrs) 
     NSLog("** \(hrs) hours from today: \(hrsFromToday.timeDayMonthYear)") 
     NSLog("hoursFromToday returns: \(hrsFromToday.hoursFromToday)"); 
     NSLog("relativeDateString returns: \(hrsFromToday.relativeDateString)") 

     var minsFromToday = today.xMins(mins) 
     NSLog("** \(mins) minutes from today: \(minsFromToday.timeDayMonthYear)") 
     NSLog("minsFromToday returns: \(minsFromToday.minsFromToday)"); 
     NSLog("relativeDateString returns: \(minsFromToday.relativeDateString)") 




     NSLog("__________________ End Testing of NSDate _________________________") 

    } 
} 

Đây là "khắc phục" tôi đã làm. Tôi đã thêm một hàm santizedDates() trả về "từ" và "đến" ngày tháng, và một hệ số dấu (+ 1/-1). Khoản chênh lệch 1 phút được thêm vào khoảng thời gian nếu so sánh trong tương lai. Nó hoạt động cho trường hợp thử nghiệm. Cũng tạo ra đầu ra chính xác và dễ đọc của con người từ relativeDateString (capitalizeFirst: Bool = false) chẳng hạn như: "hôm nay, 1 giờ 1 phút trong quá khứ".Tôi đã đăng một câu hỏi như tại sao hành vi này xảy ra ở nơi đầu tiên ở đây:

NSCalendar.components().minute returning inconsistent values

import Foundation 

// https://stackoverflow.com/questions/27339072/working-with-nsdate-components-in-swift 


public extension NSDate { 


    func xDays(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitDay, value: x, toDate: self, options: nil)! 
    } 
    func xWeeks(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitWeekOfYear, value: x, toDate: self, options: nil)! 
    } 
    func xMonths(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitMonth, value: x, toDate: self, options: nil)! 
    } 
    func xMins(x:Int) -> NSDate { 

     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitMinute, value: x, toDate: self, options: nil)! 
    } 
    func xHours(x:Int) -> NSDate { 
     return NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitHour, value: x, toDate: self, options: nil)! 
    } 
    var hoursFromToday: Int{ 

     var fromDate: NSDate = self 
     var toDate: NSDate = NSDate() 
     var sign: Int = -1 
     (fromDate,toDate, sign) = self.sanitizedDates() 

     return (sign * NSCalendar.currentCalendar().components(.CalendarUnitHour, fromDate: fromDate, toDate: toDate, options: nil).hour) 
    } 
    var weeksFromToday: Int{ 


     var fromDate: NSDate = self 
     var toDate: NSDate = NSDate() 
     var sign: Int = -1 
     (fromDate,toDate,sign) = self.sanitizedDates() 

     return (sign * NSCalendar.currentCalendar().components(.CalendarUnitWeekOfYear, fromDate: fromDate, toDate: toDate, options: nil).weekOfYear) 
    } 


    var daysFromToday: Int{ 

     var fromDate: NSDate = self 
     var toDate: NSDate = NSDate() 
     var sign: Int = -1 
     (fromDate,toDate, sign) = self.sanitizedDates() 


     return (sign * NSCalendar.currentCalendar().components(.CalendarUnitDay, fromDate: fromDate, toDate: toDate, options: nil).day) 
    } 
    var monthsFromToday: Int{ 


     var fromDate: NSDate = self 
     var toDate: NSDate = NSDate() 
     var sign: Int = -1 
     (fromDate,toDate, sign) = self.sanitizedDates() 

     return (sign * NSCalendar.currentCalendar().components(.CalendarUnitMonth, fromDate: fromDate, toDate: toDate, options: nil).month) 

    } 
    var minsFromToday: Int{ 


     var fromDate: NSDate = self 
     var toDate: NSDate = NSDate() 
     var sign: Int = -1 
     var offset: Int = 0 
     (fromDate,toDate,sign) = self.sanitizedDates() 


     return (sign * NSCalendar.currentCalendar().components(.CalendarUnitMinute, fromDate: fromDate, toDate: toDate, options: nil).minute) 
    } 

    func relativeDateString(capitalizeFirst:Bool = false) -> String { 
     let days: Int = daysFromToday 
     let mins: Int = minsFromToday % 60 

     let tense: String = (minsFromToday > 0) ? " in the future" : " in the past" 
     let hrs: Int = hoursFromToday % 24 
     var retString = (capitalizeFirst) ? "Now" : "now" 
     if(minsFromToday != 0) { 
      if(days == 0) { 
       retString = (capitalizeFirst) ? "Today" : "today" 
       retString = (mins != 0 || hrs != 0) ? retString+"," : retString 
      } 
      else { 
       let absDays = abs(days) 
       retString = "\(absDays)" 
       retString += (absDays > 1) ? " days" : " day" 
      } 
     if(hrs != 0) { 
      let absHrs = abs(hrs) 
      retString += " \(absHrs)" 
      retString += (absHrs > 1) ? " hours" : " hour" 
     } 

      if(mins != 0) { 
       let absMins = abs(mins) 
       retString += " \(absMins)" 
       retString += (absMins > 1) ? " minutes" : " minute" 
      } 

     retString += tense 
     } 

     return retString 
    } 

    //Date Comparisons 
    //https://stackoverflow.com/questions/26198526/nsdate-comparison-using-swift 


    func isGreaterThanDate(dateToCompare : NSDate) -> Bool 
    { 
     //Declare Variables 
     var isGreater = false 

     //Compare Values 
     if self.compare(dateToCompare) == NSComparisonResult.OrderedDescending 
     { 
      isGreater = true 
     } 

     //Return Result 
     return isGreater 
    } 

    func isLessThanDate(dateToCompare : NSDate) -> Bool 
    { 
     //Declare Variables 
     var isLess = false 

     //Compare Values 
     if self.compare(dateToCompare) == NSComparisonResult.OrderedAscending 
     { 
      isLess = true 
     } 

     //Return Result 
     return isLess 
    } 




    // Date printing converstions 




    var dayMonthYear: String { 
     let dateMonthYearFormatter: NSDateFormatter = NSDateFormatter() 
     let currentLocale: NSLocale = NSLocale.currentLocale() 
     let dateMonthYearFormatString: NSString! = NSDateFormatter.dateFormatFromTemplate("EdMMMyyyy",options: 0, locale: currentLocale) 
     dateMonthYearFormatter.dateFormat = dateMonthYearFormatString as! String 
     return dateMonthYearFormatter.stringFromDate(self) 
    } 

    var timeDayMonthYear: String { 
     let dateMonthYearFormatter: NSDateFormatter = NSDateFormatter() 
     let currentLocale: NSLocale = NSLocale.currentLocale() 
     let dateMonthYearFormatString: NSString! = NSDateFormatter.dateFormatFromTemplate("EdMMMyyyy' ' HH':'mm",options: 0, locale: currentLocale) 
     dateMonthYearFormatter.dateFormat = dateMonthYearFormatString as! String 
     return dateMonthYearFormatter.stringFromDate(self) 
    } 


    var hourMin: String { 
     let hourMinFormatter = NSDateFormatter(); 
     hourMinFormatter.dateFormat = "HH:mm" 
     return hourMinFormatter.stringFromDate(self) 
    } 

    static func rfc3339DateFormatter() -> NSDateFormatter { 
     let rfc3339DateFormatterRet = NSDateFormatter() 
     let enUSPOSIXLocale: NSLocale = NSLocale(localeIdentifier: "en_US_POSIX") 
     rfc3339DateFormatterRet.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'" 
     rfc3339DateFormatterRet.locale = enUSPOSIXLocale 
     rfc3339DateFormatterRet.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
     return rfc3339DateFormatterRet 
    } 


    var rfcString: String { 
     return NSDate.rfc3339DateFormatter().stringFromDate(self) 
    } 
    func rfcDate(rfcString: String) -> NSDate { 
    return NSDate.rfc3339DateFormatter().dateFromString(rfcString)! 
    } 

    func changeDate(toDate: NSDate) -> NSDate { 

     let rfcToDate = toDate.rfcString 
     let rfcSelf = self.rfcString 
     let toDateArray : [String] = rfcToDate.componentsSeparatedByString("T") 
     let selfArray : [String] = rfcSelf.componentsSeparatedByString("T") 
     return rfcDate(toDateArray[0]+"T"+selfArray[1]) 

    } 

    private func sanitizedDates() -> (fromDate: NSDate, toDate: NSDate, sign: Int) { 
     var toDate: NSDate = self 
     var fromDate: NSDate = NSDate() 
     var sign: Int = 1 
     // For toDates in the past, results are reasonable, except for sign. 
     //In future dates, we to flip dates to make them past dates and add 1 minute for unknown reason. 
     if(toDate.isGreaterThanDate(fromDate)) { 
      // NSLog("****** Flipping dates ********") 
      toDate = fromDate.xMins(-1) // In this case, the results are consistently shorter by a minute 
      fromDate = self 
      sign = -1 
     } 
     return (fromDate,toDate,sign) 

    } 

    static func test(months: Int = 0, weeks: Int = 0, days: Int = 0, hrs: Int = 0, mins: Int = 0) { 

     NSLog("****************** Start Testing of NSDate **************************") 
     NSLog("Inputs: months:\(months) weeks:\(weeks) days:\(days) hrs: \(hrs) mins: \(mins)") 
     var today = NSDate() 
     NSLog("Today is: \(today.timeDayMonthYear)") 

     var monthsFromToday = today.xMonths(months) 
     NSLog("** \(months) months from today: \(monthsFromToday.timeDayMonthYear)") 
     NSLog("monthsFromToday returns: \(monthsFromToday.monthsFromToday)"); 
     NSLog("weeksFromToday returns: \(monthsFromToday.weeksFromToday)"); 
     NSLog("daysFromToday returns: \(monthsFromToday.daysFromToday)"); 
     NSLog("hoursFromToday returns: \(monthsFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(monthsFromToday.minsFromToday)"); 
     NSLog("relativeDateString returns: \(monthsFromToday.relativeDateString())") 

     var weeksFromToday = today.xWeeks(weeks) 
     NSLog("** \(weeks) weeks from today: \(weeksFromToday.timeDayMonthYear)") 
     NSLog("weeksFromToday returns: \(weeksFromToday.weeksFromToday)"); 
     NSLog("relativeDateString returns: \(weeksFromToday.relativeDateString(capitalizeFirst:true))") 
     NSLog("minsFromToday returns: \(weeksFromToday.minsFromToday)"); 
     NSLog("monthsFromToday returns: \(weeksFromToday.monthsFromToday)"); 
     NSLog("weeksFromToday returns: \(weeksFromToday.weeksFromToday)"); 
     NSLog("daysFromToday returns: \(weeksFromToday.daysFromToday)"); 
     NSLog("hoursFromToday returns: \(weeksFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(weeksFromToday.minsFromToday)"); 




     var daysFromToday = today.xDays(days) 
     NSLog("** \(days) days from today: \(daysFromToday.timeDayMonthYear)") 
     NSLog("daysFromToday returns: \(daysFromToday.daysFromToday)"); 
     NSLog("relativeDateString returns: \(daysFromToday.relativeDateString())") 
     NSLog("minsFromToday returns: \(daysFromToday.minsFromToday)"); 
     NSLog("monthsFromToday returns: \(daysFromToday.monthsFromToday)"); 
     NSLog("weeksFromToday returns: \(daysFromToday.weeksFromToday)"); 
     NSLog("daysFromToday returns: \(daysFromToday.daysFromToday)"); 
     NSLog("hoursFromToday returns: \(daysFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(daysFromToday.minsFromToday)"); 




     var hrsFromToday = today.xHours(hrs) 
     NSLog("** \(hrs) hours from today: \(hrsFromToday.timeDayMonthYear)") 
     NSLog("hoursFromToday returns: \(hrsFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(hrsFromToday.minsFromToday)"); 
     NSLog("monthsFromToday returns: \(hrsFromToday.monthsFromToday)"); 
     NSLog("weeksFromToday returns: \(hrsFromToday.weeksFromToday)"); 
     NSLog("daysFromToday returns: \(hrsFromToday.daysFromToday)"); 
     NSLog("hoursFromToday returns: \(hrsFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(hrsFromToday.minsFromToday)"); 






     NSLog("relativeDateString returns: \(hrsFromToday.relativeDateString(capitalizeFirst:true))") 

     var minsFromToday = today.xMins(mins) 
     NSLog("** \(mins) minutes from today: \(minsFromToday.timeDayMonthYear)") 
     NSLog("minsFromToday returns: \(minsFromToday.minsFromToday)"); 
     NSLog("monthsFromToday returns: \(minsFromToday.monthsFromToday)"); 
     NSLog("weeksFromToday returns: \(minsFromToday.weeksFromToday)"); 
     NSLog("daysFromToday returns: \(minsFromToday.daysFromToday)"); 
     NSLog("hoursFromToday returns: \(minsFromToday.hoursFromToday)"); 
     NSLog("minsFromToday returns: \(minsFromToday.minsFromToday)"); 


     NSLog("relativeDateString returns: \(minsFromToday.relativeDateString())") 




     NSLog("__________________ End Testing of NSDate _________________________") 

    } 
} 
+1

Chức năng sanitizedDates là không cần thiết. Hành vi này là do thực tế rằng NSDate() được gọi nhiều lần mỗi lần retuning các giá trị khác nhau mà có thể thay đổi kết quả của phút. Sử dụng API XFromToday (hôm nay: NSDate) để tránh điều này, xem http://stackoverflow.com/questions/30822159/nscalendar-components-minute-returning-inconsistent-values/30824314#30824314 –

Các vấn đề liên quan