Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 把几天变成几个月_Date_Swiftui_Calendar - Fatal编程技术网

Date 把几天变成几个月

Date 把几天变成几个月,date,swiftui,calendar,Date,Swiftui,Calendar,例如,我想取1月的日数和对应于这一天的周名称。我怎么能得到这个 我想在天数下面显示一周的名称 我使用getNumbersOfMonths函数获取月份中的天数 需要注意的部分:2021年1月的第一天是星期五。二月的第一天是星期一。 日期提供程序 class DateProvider: ObservableObject { @Published var months: [String] = [] @Published var dateData: DateType = Da

例如,我想取1月的日数和对应于这一天的周名称。我怎么能得到这个

我想在天数下面显示一周的名称

我使用getNumbersOfMonths函数获取月份中的天数

需要注意的部分:2021年1月的第一天是星期五。二月的第一天是星期一。

日期提供程序

class DateProvider: ObservableObject {
    
    @Published var months: [String] = []
    @Published var dateData: DateType = DateType(day: "", date: "", year: "", month: "")
    
    init() {
        months = getMonths()
        dateData = getCurrentDate()
    }
    
    func getCurrentDate() -> DateType {
        let date = Date()
        var currentDate = Calendar.current
        currentDate.locale = NSLocale(localeIdentifier: "tr_TR") as Locale
        let dateString = currentDate.component(.day, from: date)
        let monthNo = currentDate.component(.month, from: date)
        let month = currentDate.monthSymbols[monthNo - 1]
        let year = currentDate.component(.year, from: date)
        let weekNo = currentDate.component(.weekday, from: date)
        let day = currentDate.weekdaySymbols[weekNo - 1]
        return DateType(day: "\(day)", date: "\(dateString)", year: "\(year)", month: "\(month)")
    }
    
    func getMonths() -> [String] {
        let formatter = DateFormatter()
        formatter.locale = NSLocale(localeIdentifier: "tr_TR") as Locale
        let monthComponents = formatter.shortMonthSymbols ?? []
        return monthComponents
    }
    
    func getNumbersOfMonths(month: Int, year: Int) -> Int {
        let dateComponents = DateComponents(year: year, month: month)
        let calendar = Calendar.current
        let date = calendar.date(from: dateComponents)!
        let range = calendar.range(of: .day, in: .month, for: date)!
        let numDays = range.count
        return numDays + 1
    }
}
ContentView

struct ContentView: View {
    @State var data: DateType = DateType(day: "", date: "", year: "", month: "")
    @ObservedObject var dateProvider: DateProvider = DateProvider()
    var body: some View {
        ScrollView {
            VStack {

                VStack {
                    Text(self.dateProvider.dateData.day)
                    Text(self.dateProvider.dateData.date)
                    Text(self.dateProvider.dateData.month)
                    Text(self.dateProvider.dateData.year)
                    
                    VStack {
                        ForEach(dateProvider.months.indices, id: \.self) { index in
                            Text("\(dateProvider.months[index])")
                            LazyVGrid(columns: Array(repeating: GridItem(.flexible()), count: 7), spacing: 10) {
                                ForEach(1 ..< dateProvider.getNumbersOfMonths(month: index + 1, year: 2021)) { item in
                                    Text("\(item)")
                                }
                            }
                            .padding(.vertical)
                        }
                    }
                }
                
            }
        }
    }
}

要获取工作日缩写,如“Mon”,首先需要获取一个由
组成的
日期

ForEach(1 ..< dateProvider.getNumbersOfMonths(month: index + 1, year: 2021)) { item in
    VStack {
        Text("\(item)")
        
        /// display weekday!
        Text("\(dateProvider.getWeekday(year: Int(dateProvider.dateData.year) ?? 2021, month: index, day: item))")
            .foregroundColor(.red)
            .font(.system(size: 12))
    }
}
  • self.dateProvider.dateData.year
  • 从第一个循环(
    ForEach(dateProvider.months.index…
    )中的
    index
    获取
    month
  • 从第二个循环(
    ForEach(1..
    )中的
    item
    获取
    day
然后,将此函数添加到
日期提供程序
类中。这将组合
的日期,然后返回工作日缩写

func getWeekday(year: Int, month: Int, day: Int) -> String {
    
    var components = DateComponents()
    components.year = year
    components.month = month
    components.day = day
    
    let formatter = DateFormatter()
    formatter.dateFormat = "E" /// see https://nsdateformatter.com/
    
    if let date = Calendar.current.date(from: components) {
        let string = formatter.string(from: date)
        return string
    }
    
    return "Mon"
}
最后,调用
getWeekday
函数,传入日期组件

ForEach(1 ..< dateProvider.getNumbersOfMonths(month: index + 1, year: 2021)) { item in
    VStack {
        Text("\(item)")
        
        /// display weekday!
        Text("\(dateProvider.getWeekday(year: Int(dateProvider.dateData.year) ?? 2021, month: index, day: item))")
            .foregroundColor(.red)
            .font(.system(size: 12))
    }
}
ForEach(1..
结果: