用户多长时间创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议:

  1. 更改数据库中的订阅源的时间,我认为这将是更好的select。

不,数据库中的date以及与Web服务通信的date不应该是格式化的string。 数据库和Web服务应该捕获原始date(或者,更准确地说,RFC3339 / ISO8601格式或某个参考date的秒数)。 用户界面string中已用时间的格式是应用程序的责任。

  1. 检索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()