用户多长时间创build一个post,NSDate(),操作创build“post时间”的格式
我正在制作一个社交应用程序,将其post保存在用户特定的节点中,同时我也以这种格式保存发布的时间:
2016年7月20日(星期三),00:14
我与用户的朋友的全球饲料中的post显示。
-
在那个post的24小时之前,我想要显示邮件上的post时间为: – “5小时前”
-
在发布后的24小时后,成为这样的事情: – “昨天” …
-
经过48小时的岗位后成为这样的东西: – “8月5日” …
到目前为止,我已经拿出了这两个选项:
1.)更改数据库中的Feed的时间,我认为这将是更好的select。
2.)检索post的时间, if
条件迭代通过MULTIPLE并相应地设置post的时间。
我将能够实现第二个选项,但我不知道如何与选项之一前进
鉴于我的JSON树是这样的
appname:{ users : {.... ..... user1 : {.... ..... postsCreated : { post1 : { .. timeofPost : ""Wednesday, Aug 5, 2016, 00:14"" } } } } }
我偶然发现了http://momentjs.com/,但那是Javascript
还有我的JSON树上的任何build议还是这样的罚款?
你build议:
- 更改数据库中的订阅源的时间,我认为这将是更好的select。
不,数据库中的date以及与Web服务通信的date不应该是格式化的string。 数据库和Web服务应该捕获原始date(或者,更准确地说,RFC3339 / ISO8601格式或某个参考date的秒数)。 用户界面string中已用时间的格式是应用程序的责任。
- 检索post的时间,如果条件迭代通过MULTIPLE并相应地设置post的时间。
是的,这就是你应该做的。
顺便说一句,如果你要省略这一年,那么如果过去一年以上的话,你可能会有第四个排列,如:
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 }()
您唯一需要做的就是将Web服务返回的string转换为NSDate
对象。 为此,Web服务可能应该以ISO 8601 / RFC 3339格式(例如2016-08-26T15:01:23Z
格式)返回发布date。
在Swift 2中创buildISO8601 / RFC3339date:
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()