gpt4 book ai didi

ios - User 多久前创建了一个帖子,NSDate(),操作创建的 "time of post"的格式

转载 作者:搜寻专家 更新时间:2023-11-01 06:18:27 25 4
gpt4 key购买 nike

我正在制作一个社交应用程序,将其帖子保存在用户特定的节点中,这样我也节省了以这种格式发布帖子的时间:-

2016 年 7 月 20 日,星期三,00:14

我在用户 friend 的全局订阅源中与帖子一起显示。

  • 在那个帖子的 24 小时之前,我想在提要上显示帖子的时间是这样的:- “5 小时前”

  • 在发布 24 小时后,发布时间变成这样:- “昨天”...

  • 48 小时后,发布时间变成这样:- “8 月 5 日”...

到目前为止,我已经提出了这两个选项:-

1.) 更改数据库中提要的时间,我认为这是更好的选择。

2.) 检索发布时间,遍历多个 if 条件并相应地设置发布时间。

我可以实现第二个选项,但我不知道如何继续使用第一个选项

鉴于我的 JSON 树是这样的

appname:{

users : {....
.....

user1 : {....
.....

postsCreated : {
post1 : {
..
timeofPost : ""Wednesday, Aug 5, 2016, 00:14""

}
}
}
}
}

我确实偶然发现了 http://momentjs.com/但那是 Javascript

还有关于我的 JSON 树的任何建议,或者它的方式是否合适?

最佳答案

你提议:

  1. Change the time of the feed in the database, which i think would be much better option.

不,数据库中的日期,以及与网络服务通信的日期,不应该是格式化的字符串。数据库和 Web 服务应该捕获原始日期(或者更准确地说,RFC3339/ISO8601 格式或某个引用日期的秒数)。在 UI 的字符串中格式化耗时是应用程序的责任。

  1. Retrieve the time of post, iterate through MULTIPLE if conditions and set the time of post accordingly.

是的,那是你应该做的。

顺便说一句,如果您要省略年份,您可能有第四个排列,如果日期超过一年,则包括年份,例如:

func formattedPostDateString(date: NSDate) -> String {
let now = NSDate()
let elapsed = NSCalendar.currentCalendar().components([.Day, .Year], fromDate: date, toDate: now, options: [])

switch (elapsed.year, elapsed.day) {
case (0, 0):
return "\(elapsedFormatter.stringFromDate(date, toDate: now)!) \(agoDateString)"
case (0, 1):
return yesterdayString
case (0, _):
return "\(onDateString) \(lessThanOneYearFormatter.stringFromDate(date))"
default:
return "\(onDateString) \(moreThanOneYearFormatter.stringFromDate(date))"
}
}

在哪里

let onDateString = NSLocalizedString("On", comment: "prefix used in 'On 5 Aug'")
let agoDateString = NSLocalizedString("ago", comment: "suffix use in '4 hours ago'")
let yesterdayString = NSLocalizedString("Yesterday", comment: "showing 'date' where it's between 24 and 48 hours ago")

let elapsedFormatter: NSDateComponentsFormatter = {
let formatter = NSDateComponentsFormatter()
formatter.allowedUnits = [.Year, .Month, .Day, .Hour, .Minute, .Second]
formatter.unitsStyle = .Full
formatter.maximumUnitCount = 1
return formatter
}()

let lessThanOneYearFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("MMM d", options: 0, locale: nil)
return formatter
}()

let moreThanOneYearFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.dateStyle = .MediumStyle
return formatter
}()

您唯一需要做的就是将网络服务返回的字符串转换为NSDate 对象。为此,Web 服务可能应该以 ISO 8601/RFC 3339 格式(例如 2016-08-26T15:01:23Z 格式)返回发布日期。


在 Swift 2 中创建 ISO8601/RFC3339 日期:

let isoDateFormatter: NSDateFormatter = {
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
return formatter
}()

然后:

let string = isoDateFormatter.stringFromDate(date)

或者

let date = isoDateFormatter.dateFromString(string)

或者在使用 Swift 3 的 iOS 10+ 中,您可以使用新的 ISO8601DateFormatter:

let isoDateFormatter = ISO8601DateFormatter()

关于ios - User 多久前创建了一个帖子,NSDate(),操作创建的 "time of post"的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39171135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com