2017-07-31 64 views
0

我有一个字符串格式的日期,例如: - “2017-07-31”或可以是字符串格式的多个日期(任何)。我的要求是检查这个日期到当前的日期,如果它大于0且小于15,那么我必须做另一次操作。来自字符串的日期不正确,两个日期的差异也使用Swift 3?

所以首先我将日期字符串转换为日期格式。但它是在一天前提供的日期。这里是我的代码:

//Date from string 
func dateFromString(date : String) -> Date { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    let currentDate = (dateFormatter.date(from: date))//(from: date)) 
    return currentDate! 
} 

Ex。我的日期是“2017-08-30”,并且此函数以日期格式返回2017-08-29 18:30:00 +0000。这意味着1天前。我对日期操作有点混淆。我也阅读了很多博客。

之后,我必须检查此日期到当前日期,如果它在0 < 15之间比我会做其他操作。

比较两个日期:

如果我的日期是当天的日期和比较明天日期,那么也它给0天差异。为什么?

+0

'2017年8月29日18:30:00 + 0000'是*正确。*日期没有时区,并且始终以UTC格式打印。它与您当地时区中的“2017-08-30”是*相同的日期*。 –

+0

好的,但与当前日期相比,它很奇怪。它没有给予适当的区别。谢谢 – kishor0011

+0

请提供带输入数据,期望输出和实际输出的[mcve]。 –

回答

1

如果 - 例如 - 当前日期是2017- 07-31在11AM然后 与2017-08-01(午夜)的差异是0天和13小时,这就是为什么你会得到“0天差异”结果。

你可能需要的是比较天开始当天的 和其他日期之间的区别:

extension Date { 
    func daysBetween(toDate: Date) -> Int { 
     let cal = Calendar.current 
     let startOfToday = cal.startOfDay(for: self) 
     let startOfOtherDay = cal.startOfDay(for: toDate) 
     return cal.dateComponents([.day], from: startOfToday, to: startOfOtherDay).day! 
    } 
} 
+0

感谢解释。它正在工作,但我想问一个当前日期的事情会比较“2017-07-31”,所以到2017-08-01已经有24小时的差异,但是它给了0天。那么你使用startOfDay? – kishor0011

0

尝试转换为字符串,此方法日期:

func dateFromString(date : String) -> Date { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    dateFormatter.timeZone = TimeZone.init(abbreviation: "UTC") 
    let currentDate = (dateFormatter.date(from: date))//(from: date)) 
    return currentDate! 
} 
0

试试这个在几秒钟内两个日期之间的时间比较:

var seconds = Calendar.current.dateComponents([.second], from: date1!, to: date2!).second ?? 0 

    seconds = abs(seconds) 

    let min = seconds/60  // this gives you the number of minutes between two dates 
    let hours = seconds/3600 // this gives you the number of hours between two dates 
    let days = seconds/3600*24 // this gives you the number of days between two dates 
+0

** NO。** - 一天可以有23,24或25小时。考虑夏令时。 –

+0

是的,这可能是一个问题。谢谢指出,所以我们可以把条件相应地 –