将时间戳转换为各种格式的日期 Swift

Convert Timestamp to Date with various formats Swift

代码:-

let addedTime = dictMessage?.object(forKey: "added_time") as? String
let timeinterval : TimeInterval = (addedTime as NSString).doubleValu                
let dateFromServer = NSDate(timeIntervalSince1970:timeinterval)
let dateFormater : DateFormatter = DateFormatter()              
dateFormater.dateFormat = "dd-MMM-yyyy hh:mm a"
cellDetailsShop.lblTimeShop?.text = dateFormater.string(from: dateFromServer as Date)

我有一个 json,从 json 我得到 Timestamp,我已经将其转换为 Date.Date,我收到的它以 [=13] 格式显示=]。但我想显示日期,如果日期是今天,那么它会显示:Today 04:55 PM,如果日期是昨天,那么我会显示:Yesterday 5 PM,如果在那之前,它应该显示因为我正在从 JSON 检索。我搜索了各种链接,但找不到 answer.Could 提前有人帮助 me.Thanks。

使用以下代码

   func relativeDate(for date:Date) -> String {
        let components = Calendar.current.dateComponents([.day, .year, .month, .weekOfYear], from: date, to: Date())
        if let year = components.year, year == 1{
            return "\(year) year ago"
        }
        if let year = components.year, year > 1{
            return "\(year) years ago"
        }
        if let month = components.month, month == 1{
            return "\(month) month ago"
        }
        if let month = components.month, month > 1{
            return "\(month) months ago"
        }

        if let week = components.weekOfYear, week == 1{
            return "\(week) week ago"
        }
        if let week = components.weekOfYear, week > 1{
            return "\(week) weeks ago"
        }

        if let day = components.day{
            if day > 1{
                return "\(day) days ago"
            }else{
                "Yesterday"
            }
        }
        return "Today"
    }

如果日期是今天还是昨天,您可以从 Calendar 对象中获取。 在此基础上,您可以根据需要设置 String。 我已经创建了一个您需要的示例。 下面是代码。

var yesterdayStr = "17-Jan-2018 10:23 AM"
var todayStr = "18-Jan-2018 10:23 AM"
var tomorrowStr = "19-Jan-2018 10:23 AM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MMM-yyyy hh:mm a"
let yesterDaydate = dateFormatter.date(from: yesterdayStr)
let todayDate = dateFormatter.date(from: todayStr)
let tomorrowDate = dateFormatter.date(from: tomorrowStr)
let anotherDateFormatter = DateFormatter()
anotherDateFormatter.dateFormat = "hh:mm a"
if Calendar.current.isDateInYesterday(yesterDaydate!)
{
    let yesterdayDisplayString = "Yesterday, " + anotherDateFormatter.string(from: yesterDaydate!)
}
if Calendar.current.isDateInToday(todayDate!) {
    let todayDisplayString = "Today, " + anotherDateFormatter.string(from: todayDate!)
}
if Calendar.current.isDateInToday(tomorrowDate!) {

}
else {
    let anotherDisplayString = anotherDateFormatter.string(from: tomorrowDate!)
}

这是输出,

你可以这样做。

let addedTime = dictMessage?.object(forKey: "added_time") as? String
let timeinterval : TimeInterval = (addedTime as NSString).doubleValue
let dateFromServer = NSDate(timeIntervalSince1970:timeinterval)
let dateFormater : DateFormatter = DateFormatter()
if Calendar.current.isDateInToday(dateFromServer) {
    dateFormater.dateFormat = "'Today' hh:mm a"
}
else if Calendar.current.isDateInYesterday(dateFromServer) {
    dateFormater.dateFormat = "'Yesterday' hh:mm a"
}
else {
    dateFormater.dateFormat = "dd-MMM-yyyy hh:mm a"
}
cellDetailsShop.lblTimeShop?.text = dateFormater.string(from: dateFromServer as Date)

如果您有任何意见,请告诉我。

谢谢。

如果您可以在没有自定义日期格式的情况下做到这一点 DateFormatter 提供本地化的相对格式。日期格式考虑了系统偏好设置中的设置。

let dateFromServer = Date(timeIntervalSinceNow: -100000)
let dateFormatter = DateFormatter()
dateFormatter.doesRelativeDateFormatting = true
dateFormatter.timeStyle = .short
dateFormatter.dateStyle = .short
let string = dateFormatter.string(from: dateFromServer)

请不要在 Swift 中使用 Foundation NSStringNSDate,请使用原生结构

if let addedTime = dictMessage?["added_time"] as? String,
    let timeinterval = TimeInterval(addedTime) {
        let dateFromServer = Date(timeIntervalSince1970:timeinterval)
        let dateFormater = DateFormatter() 
        ...
}