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

时间:2017-09-04 07:24:57

标签: swift nsdate

我有两个日期的例子,一个比其他更新。我需要在15分钟之前,之前10小时,之前2天,之前7周,之前2年和#34;输出字符串#34;因此,我需要以某种方式确定最大数据单位(小时,分钟,月,年),然后计算该单位的数量。

有没有一种简单的方法可以做到这一点,而不会使用太多的if并且比较2个NSDates的秒数?

感谢。

1 个答案:

答案 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" 
相关问题