来自字符串的日期不正确并且两个日期差异也使用 Swift 3?
Date from string is not coming properly and two dates difference also using Swift 3?
我有一个字符串格式的日期,例如:-“2017-07-31”或者可以是字符串格式的多个日期(任意)。我的要求是检查这个日期到当前日期,如果它大于0小于15,那么到时候我必须再做一次操作。
所以首先我将该日期字符串转换为日期格式。但它给出了一天前的日期。这是我的代码:
//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!
}
例如。我的日期是“2017-08-30”,此函数以日期格式返回 2017-08-29 18:30:00 +0000。这意味着 1 天前。我对日期操作有点困惑。我也读了很多博客。
之后我必须将这个日期检查为当前日期,如果它在 0 < 15 之间,我将进行其他操作。
比较两个日期:
extension Date {
func daysBetweenDate(toDate: Date) -> Int {
let components = Calendar.current.dateComponents([.day], from: self, to: toDate)
return components.day ?? 0
}
}
如果我的日期是今天的日期并且与明天的日期进行比较,那么它也会给出 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!
}
试试这个以秒为单位比较两个日期之间的时间:
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
如果 - 例如 - 当前日期是 2017 年 7 月 31 日上午 11 点,那么
与 2017-08-01(午夜)的区别是 0 天 13 小时,那就是
为什么结果是“0 天差异”。
您可能想要比较 start 之间的区别
当天和其他日期的天数:
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”或者可以是字符串格式的多个日期(任意)。我的要求是检查这个日期到当前日期,如果它大于0小于15,那么到时候我必须再做一次操作。
所以首先我将该日期字符串转换为日期格式。但它给出了一天前的日期。这是我的代码:
//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!
}
例如。我的日期是“2017-08-30”,此函数以日期格式返回 2017-08-29 18:30:00 +0000。这意味着 1 天前。我对日期操作有点困惑。我也读了很多博客。
之后我必须将这个日期检查为当前日期,如果它在 0 < 15 之间,我将进行其他操作。
比较两个日期:
extension Date {
func daysBetweenDate(toDate: Date) -> Int {
let components = Calendar.current.dateComponents([.day], from: self, to: toDate)
return components.day ?? 0
}
}
如果我的日期是今天的日期并且与明天的日期进行比较,那么它也会给出 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!
}
试试这个以秒为单位比较两个日期之间的时间:
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
如果 - 例如 - 当前日期是 2017 年 7 月 31 日上午 11 点,那么 与 2017-08-01(午夜)的区别是 0 天 13 小时,那就是 为什么结果是“0 天差异”。
您可能想要比较 start 之间的区别 当天和其他日期的天数:
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!
}
}