You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Swift中如何计算两个Unix时间戳的分钟差值?

计算两个Unix Epoch时间的分钟差值问题解决

嘿,我来帮你搞定这个时间差值计算的问题!你已经写好了不错的Date扩展来处理毫秒级时间戳,现在只需要调整代码细节,就能精准得到预期的9分钟差值啦。

问题根源

你之前的代码里存在单位不统一的问题:currentTime是毫秒级的整数(通过millisecondsSince1970获取),但startedTinme是转成了秒级的TimeInterval,两者直接计算差值会导致单位混乱,自然得不到准确结果。

修正方案一:用Date对象优雅处理

利用你已经写好的Date扩展,我们可以把时间戳都转成Date实例,再计算间隔:

// 你已经定义好的Date扩展
extension Date {
    var millisecondsSince1970: Int {
        return Int((self.timeIntervalSince1970 * 1000.0).rounded())
    }
    init(milliseconds: Int) {
        self = Date(timeIntervalSince1970: TimeInterval(milliseconds) / 1000)
    }
}

// 服务器返回的毫秒时间戳(对应下午5:03)
let serverTimestamp = 1552086180000
let startTime = Date(milliseconds: serverTimestamp)

// 获取当前时间
let currentTime = Date()

// 计算时间间隔(秒级)
let timeInterval = currentTime.timeIntervalSince(startTime)

// 直接计算分钟差值(如果需要整数可以用rounded()或Int()转换)
let minuteDifference = timeInterval / 60
print("分钟差值:\(minuteDifference)") // 预期输出接近9.0

// 用格式化工具输出友好的结果
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .second]
formatter.unitsStyle = .abbreviated
if let formattedString = formatter.string(from: timeInterval) {
    print("格式化后的差值:\(formattedString)") // 会输出类似"9 min"或"9 min 0 sec"
}

修正方案二:直接用时间戳数值计算(保证单位统一)

如果你不想用Date对象,也可以直接对毫秒数值进行计算,只要保证两个时间戳单位一致:

// 你已经定义好的Date扩展
extension Date {
    var millisecondsSince1970: Int {
        return Int((self.timeIntervalSince1970 * 1000.0).rounded())
    }
}

let currentMillis = Date().millisecondsSince1970
let serverMillis = 1552086180000

// 毫秒差值转分钟:差值除以(1000毫秒/秒 * 60秒/分钟)
let minuteDiff = Double(currentMillis - serverMillis) / (1000 * 60)
print("分钟差值:\(minuteDiff)") // 同样会得到9左右的结果

核心要点

不管用哪种方式,统一时间戳的单位是关键:要么都用毫秒,要么都转成秒,再进行差值计算,最后除以60(秒转分钟)或60000(毫秒转分钟)就能得到准确的分钟数啦。

内容的提问来源于stack exchange,提问作者Amit Pal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:21:53