来自字符串的日期不正确,两个日期的差异也使用Swift 3?
我有一个字符串格式的日期,例如: - “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天差异。为什么?
如果 - 例如 - 当前日期是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!
}
}
感谢解释。它正在工作,但我想问一个当前日期的事情会比较“2017-07-31”,所以到2017-08-01已经有24小时的差异,但是它给了0天。那么你使用startOfDay? – kishor0011
尝试转换为字符串,此方法日期:
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!
}
试试这个在几秒钟内两个日期之间的时间比较:
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
** NO。** - 一天可以有23,24或25小时。考虑夏令时。 –
是的,这可能是一个问题。谢谢指出,所以我们可以把条件相应地 –
'2017年8月29日18:30:00 + 0000'是*正确。*日期没有时区,并且始终以UTC格式打印。它与您当地时区中的“2017-08-30”是*相同的日期*。 –
好的,但与当前日期相比,它很奇怪。它没有给予适当的区别。谢谢 – kishor0011
请提供带输入数据,期望输出和实际输出的[mcve]。 –