swift - 从特定日期 Swift 获取更大日期单位的最简单方法

标签 swift nsdate

我有 2 个日期示例,一个比另一个新。我需要输出像“15 分钟前、10 小时前、2 天前、7 周前、2 年前”这样的字符串。因此,我需要以某种方式确定最大的数据单位(小时、分钟、月、年),然后计算该单位的数量。

有没有一种简单的方法可以在不使用太多 if 和比较 2 个 NSDate 的秒数的情况下做到这一点?

谢谢。

最佳答案

听起来像 DateComponentsFormatter 可能是您正在寻找的。

我以这两个日期为例

let earlier = // 29 Sep 2017, 04:36 
let later   = //  2 Oct 2017, 10:04 

创建组件格式化程序并在这两个日期之间格式化组件(无需任何进一步配置)会产生以下结果:

let componentFormatter = DateComponentsFormatter()
componentFormatter.string(from: earlier, to: later)
// "3d 5:28:07" 

如果像您的问题一样,您希望格式化字符串使用完整的单位名称,您可以配置 unitStyle格式化程序的:

componentFormatter.unitsStyle = .full
// "3 days, 5 hours, 28 minutes, 7 seconds" 

如果希望格式化字符串只包含大单位,可以配置maximumUnitCount格式化程序的:

componentFormatter.maximumUnitCount = 1
// "3 days" 

根据您要向用户传达的准确度,您可能希望表明这个单一单位是一个近似值。您可以通过启用 includesApproximationPhrase 来做到这一点在格式化程序上:

componentFormatter.includesApproximationPhrase = true
// "About 3 days" 

关于swift - 从特定日期 Swift 获取更大日期单位的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032204/

相关文章:

ios - 在 iOS 中计算 hh.mm.ss 格式的时间间隔

iphone - 将 NSDate 值保存到 plist

iphone - 如何随时间将 NSString 转换为 NSDate?

ios - 如果它们在表中,我如何使用 hitTest 获取底层 View ?

ios - 如何查看 Game Center 设备的 iOS 版本?

ios - 如何从子节点创建数组?

ios - 如何在 iOS 中将底部安全区域设置为 XIB?

ios - 从 Swift 函数中的异步调用返回数据

Objective-c 从星期一开始获取星期几,而不是星期日

ios - 来自 .medium 格式的字符串的日期