我有两个日期的例子,一个比其他更新。我需要在15分钟之前,之前10小时,之前2天,之前7周,之前2年和#34;输出字符串#34;因此,我需要以某种方式确定最大数据单位(小时,分钟,月,年),然后计算该单位的数量。
有没有一种简单的方法可以做到这一点,而不会使用太多的if并且比较2个NSDates的秒数?
感谢。
答案 0 :(得分:2)
听起来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"
如果您希望格式化字符串仅包含larges单元,则可以配置格式化程序的maximumUnitCount
:
componentFormatter.maximumUnitCount = 1
// "3 days"
根据您要传达给用户的准确性,您可能希望指明此单个单位是近似值。您可以通过在格式化程序上启用includesApproximationPhrase
来执行此操作:
componentFormatter.includesApproximationPhrase = true
// "About 3 days"