我有 2 个日期示例,一个比另一个新。我需要输出像“15 分钟前、10 小时前、2 天前、7 周前、2 年前”这样的字符串。因此,我需要以某种方式确定最大的数据单位(小时、分钟、月、年),然后计算该单位的数量。
有没有一种简单的方法可以在不使用太多 if 和比较 2 个 NSDate 的秒数的情况下做到这一点?
谢谢。
最佳答案
听起来像 DateComponentsFormatter
可能是您正在寻找的。p>
我以这两个日期为例
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/