Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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
Ios 获取带有日期名称、日期和月份名称的日期_Ios_Swift_Calendar_Dayofweek - Fatal编程技术网

Ios 获取带有日期名称、日期和月份名称的日期

Ios 获取带有日期名称、日期和月份名称的日期,ios,swift,calendar,dayofweek,Ios,Swift,Calendar,Dayofweek,我正在尝试创建一个带有日期名称和日期的周日历。我怎样才能得到同样的。我知道之前有人多次问过类似的问题,但我没有找到准确的答案。当前只能获取一周的日期。如何获取日期名称和日期。下面是我的代码: extension Calendar { static let gregorian = Calendar(identifier: .gregorian) } extension Date { var startingDayOfWeek: Date { return Calendar.gregoria

我正在尝试创建一个带有日期名称和日期的周日历。我怎样才能得到同样的。我知道之前有人多次问过类似的问题,但我没有找到准确的答案。当前只能获取一周的日期。如何获取日期名称和日期。下面是我的代码:

extension Calendar {
static let gregorian = Calendar(identifier: .gregorian)
}
extension Date {
var startingDayOfWeek: Date {
    return Calendar.gregorian.date(from: Calendar.gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self))!
}
var daysOfWeek: [Date] {
    let startOfWeek = self.startingDayOfWeek
    return (0...6).compactMap{ Calendar.current.date(byAdding: .day, value: $0, to: startOfWeek)}
}
}

print(Date().daysOfWeek)
输出:

2021-05-29 18:30:00 +0000, 2021-05-30 18:30:00 +0000, 2021-05-31 18:30:00 +0000, 2021-06-01 18:30:00 +0000, 2021-06-02 18:30:00 +0000, 2021-06-03 18:30:00 +0000, 2021-06-04 18:30:00 +0000
["Monday, May 31, 2021", "Tuesday, Jun 1, 2021", "Wednesday, Jun 2, 2021", "Thursday, Jun 3, 2021", "Friday, Jun 4, 2021"]
代码 输出
通过上面的注释,修复了它

 let calendar = Calendar.current
    let today = calendar.startOfDay(for: Date())
    let dayOfWeek = calendar.component(.weekday, from: today)
    let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today)!
    let days = (weekdays.lowerBound ..< weekdays.upperBound)
        .compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today) }  // use `flatMap` in Xcode versions before 9.3
        .filter { !calendar.isDateInWeekend($0) }
    
    let formatter = DateFormatter()
    formatter.dateFormat = "EEEE, MMM d, yyyy"//"eeee' = 'D"
    let strings = days.map { formatter.string(from: $0) }
    print(strings)

你有没有研究过按你想要的方式格式化日期?当使用DateFormat时,它是一个很有用的网站。因为它以UTC而不是你想要的时区打印日期,所以打印原始的
日期
值是非常危险的。如果要将日期转换为字符串,则必须使用带有适当时区的
日期格式化程序
,否则会给应用程序带来各种错误。@AdamPro13 UTC部分在说明中的“+0000”处清晰可见,而不是在UI上显示日期。这只是为了显示日期值,就像您在调试器中看到的那样。1。我认为,
+0000
表示UTC不是常识。2.OP没有说明他们试图使用这些日期做什么。3.其他不熟悉日期的人会遇到这个答案并犯下这个错误。谢谢@taruntygi
(lldb) po weekdays.map({ $0.description })
▿ 7 elements
  - 0 : "Monday 2021-05-30 18:30:00 +0000"
  - 1 : "Tuesday 2021-05-31 18:30:00 +0000"
  - 2 : "Wednesday 2021-06-01 18:30:00 +0000"
  - 3 : "Thursday 2021-06-02 18:30:00 +0000"
  - 4 : "Friday 2021-06-03 18:30:00 +0000"
  - 5 : "Saturday 2021-06-04 18:30:00 +0000"
  - 6 : "Sunday 2021-06-05 18:30:00 +0000"
 let calendar = Calendar.current
    let today = calendar.startOfDay(for: Date())
    let dayOfWeek = calendar.component(.weekday, from: today)
    let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: today)!
    let days = (weekdays.lowerBound ..< weekdays.upperBound)
        .compactMap { calendar.date(byAdding: .day, value: $0 - dayOfWeek, to: today) }  // use `flatMap` in Xcode versions before 9.3
        .filter { !calendar.isDateInWeekend($0) }
    
    let formatter = DateFormatter()
    formatter.dateFormat = "EEEE, MMM d, yyyy"//"eeee' = 'D"
    let strings = days.map { formatter.string(from: $0) }
    print(strings)
["Monday, May 31, 2021", "Tuesday, Jun 1, 2021", "Wednesday, Jun 2, 2021", "Thursday, Jun 3, 2021", "Friday, Jun 4, 2021"]