如何从 SwiftUI 中的日期输入仅显示“日和月”

问题描述

我有一个表单,用户应该在其中选择一个日期,然后写一个总和。它工作正常,但是当我在列表中显示信息(表单核心数据)时,会显示整个日期字符串(时区、时间、年份等)。必须有一种简单的方法显示月份和日期+日期吗?比如“1 月 28 日星期四”

我的 ContentView 代码

struct ContentView: View {
    @Environment(\.managedobjectContext) var moc
    @FetchRequest(entity: Kostnad.entity(),sortDescriptors: []) var kostnader:
    FetchedResults<Kostnad>
    
    @State private var showingAddScreen = false
    
 
    
    
    var body: some View {
        NavigationView{
           // Text("Count: \(kostnader.count)")
            List{
                ForEach(kostnader,id: \.self) { kostnad in
                    vstack{
                        Text("\(kostnad.sum)")
                        Text("\(kostnad.dato ?? Date())")
                    }
                }
                .onDelete(perform: deleteBooks)
               // Text("Month: \(components)")
            }
            .navigationBarTitle("Legg til")
            .navigationBarItems(leading: EditButton(),trailing:
                Button(action: {
                    self.showingAddScreen.toggle()
                }) {
                    Image(systemName: "plus")
                }
            )
            .sheet(isPresented: $showingAddScreen) {
                AddKostnad().environment(\.managedobjectContext,self.moc)
            }
        }
    }
    func deleteBooks(at offsets: IndexSet) {
        for offset in offsets {
            let kostnad = kostnader[offset]
            moc.delete(kostnad)
        }
        
        try? moc.save()
    }
}

Image of the output the way it is now!

解决方法

使用 DateFormatter 扩展。

extension DateFormatter {
    static let displayDate: DateFormatter = {
         let formatter = DateFormatter()
         formatter.dateFormat = "EEEE,MMMM dd"
         return formatter
    }()
}

在视图内部

Text(DateFormatter.displayDate.string(from: kostnad.dato ?? Date()))