如何在以下示例中计算出日差

Posted

技术标签:

【中文标题】如何在以下示例中计算出日差【英文标题】:How can I figure out the day difference in the following example 【发布时间】:2016-06-11 01:15:51 【问题描述】:

我正在计算两个日期之间的天差,但我发现下面的代码实际上给了我 24 小时的差,而不是日期的差。我有以下代码:

func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int

    let calendar = NSCalendar.currentCalendar()

    let components = calendar.components([.Day], fromDate:startDate, toDate: endDate, options: [])

    return components.day

因此,对于以下示例,我得到了以下结果:

上次发布时间:2016-06-10 01:39:07 +0000

今天:2016-06-11 00:41:41 +0000

dayDiff:0

我原以为天差是 1,因为上次发布是在 10 日,而今天是 11 日。如何更改代码以提供几天的实际日期差异?

【问题讨论】:

如果今天的时间是 2016-06-11 01:39:07 +0000 或更晚,会是 1 吗? 看这里,你的问题似乎很相似:***.com/questions/4739483/… 【参考方案1】:

您可以使用 Calendar 方法 date BySettingHour 来获取您的 startDate 和 endDate 的中午时间,以使您的日历计算对时间不敏感:

Xcode 8.2.1 • Swift 3.0.2

extension Date 
    var noon: Date? 
        return Calendar.autoupdatingCurrent.date(bySettingHour: 12, minute: 0, second: 0, of: self)
    
    func daysBetween(_ date: Date) -> Int? 
        guard let noon = noon, let date = date.noon else  return nil 
         return Calendar.autoupdatingCurrent.dateComponents([.day], from: noon, to: date).day
    


let startDateString = "2016-06-10 01:39:07 +0000"
let todayString = "2016-06-11 00:41:41 +0000"
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "ex_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss xxxx"
if let startDate = formatter.date(from: startDateString),
    let endDate = formatter.date(from: todayString),
    let days = startDate.daysBetween(endDate) 
    print(startDate)  // "2016-06-10 01:39:07 +0000\n"
    print(endDate)    // "2016-06-11 00:41:41 +0000\n"
    print(days ?? "nil") // 1


Swift 2.x

extension NSDate 
    var noon: NSDate 
        return NSCalendar.currentCalendar().dateBySettingHour(12, minute: 0, second: 0, ofDate: self, options: [])!
    

func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int 
    return NSCalendar.currentCalendar().components([.Day],
                                fromDate: startDate.noon,
                                toDate: endDate.noon,
                                options: []).day

【讨论】:

以上是关于如何在以下示例中计算出日差的主要内容,如果未能解决你的问题,请参考以下文章

时钟校验仪电能表日计时误差测试仪技术参数

PHP 计算日差

没有周末的日差

秒表检定仪和日差检定仪建标方案以及设备选用

在这个例子中如何打印输出值?

秒表检定仪和瞬时日差检定仪使用介绍