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

SwiftUI如何避免日期倒计时出现负值?

倒计时负值问题解决方案

你可以直接修改numDaysWithToday计算属性的取值逻辑,对返回的差值做下限截断,强制最小值为0即可,修改后的代码如下:

var numDaysWithToday: Int {
    /// dayFromNow 示例为14天后的日期
    get {
        let remainingDays = Calendar.current.dateComponents([.day], from: Date(), to: dateFromNow).day ?? 0
        // 取计算结果和0的较大值,所有小于0的结果都会返回0
        return max(0, remainingDays)
    }
}
Text("\(numDaysWithToday) days left")

逻辑说明

  • 当当前日期晚于你设定的目标日期dateFromNow时,dateComponents接口返回的day值会是负数
  • 用max函数做取值截断后,只要剩余天数小于等于0,都会统一返回0,不会再出现负值倒计时的情况
  • 这里同时把原代码的强制解包!替换成了可选默认值?? 0,避免日期计算异常返回nil时触发崩溃

可选优化

如果需要更友好的到期提示,也可以在UI渲染层加判断:

if numDaysWithToday > 0 {
    Text("\(numDaysWithToday) 天剩余")
} else {
    Text("已到期")
}

内容的提问来源于stack exchange,提问作者Maksym Kucherenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:18:03