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

如何修改SwiftUI DatePicker中显示的日期文本(如替换为Today)?

解决SwiftUI DatePicker自定义日期显示(如替换为Today)的问题

无需自定义DatePickerStyle,利用iOS15+提供的formatter参数即可实现需求,以下是具体实现方式:

方法1:利用系统相对日期格式化

如果只需自动显示“Today”“Yesterday”这类相对日期,直接开启DateFormatter的相对日期格式化功能即可:

import SwiftUI

struct ContentView: View {
    @State private var myDate = Date()
    
    // 自定义日期格式化器
    private let dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium // 设置非相对日期的显示格式
        formatter.timeStyle = .none
        formatter.doesRelativeDateFormatting = true // 启用相对日期显示
        return formatter
    }()
    
    var body: some View {
        DatePicker(
            "What date?",
            selection: $myDate,
            formatter: dateFormatter
        )
        .padding()
    }
}

方法2:完全自定义日期显示逻辑

如果需要更精准的控制(比如仅将今天替换为“Today”,其他日期用指定格式),可以自定义DateFormatter子类:

import SwiftUI

// 自定义格式化器,重写日期转换逻辑
class CustomDateFormatter: DateFormatter {
    override func string(from date: Date) -> String {
        let calendar = Calendar.current
        // 判断是否为今天
        if calendar.isDateInToday(date) {
            return "Today"
        } else {
            // 设置非今天的日期格式
            self.dateFormat = "d MMM yyyy"
            return super.string(from: date)
        }
    }
}

struct ContentView: View {
    @State private var myDate = Date()
    private let customFormatter = CustomDateFormatter()
    
    var body: some View {
        DatePicker(
            "What date?",
            selection: $myDate,
            formatter: customFormatter
        )
        .padding()
    }
}

注意事项

  • 上述方法依赖iOS15、macOS12、tvOS15、watchOS8及以上版本的API;
  • 若需兼容更低版本,可通过Text叠加透明DatePicker的方式实现:将自定义文本显示在前台,背后放置透明的DatePicker以保留交互逻辑。

内容的提问来源于stack exchange,提问作者Brendan White

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:15:27