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
Swift 如何在两个日期之间获得每个星期五的日期?_Swift_Date_Calendar - Fatal编程技术网

Swift 如何在两个日期之间获得每个星期五的日期?

Swift 如何在两个日期之间获得每个星期五的日期?,swift,date,calendar,Swift,Date,Calendar,我目前使用以下代码为两个日期之间的每一天返回一个日期数组,包括今天的日期和最后一个日期本身。这很有效 然而,我将如何着手修改我在中已经在做的事情 否则,命令执行相同的操作,但返回 日期之间每个星期五的日期数组?例如,如果该函数在2019年10月23日星期三调用,以在11月10日之前的每个星期五返回,则第一个日期将是25日星期五、11月1日,然后是11月8日 除了每个月的第一天,我将如何做与上述相同的事情?如果我在2019年10月23日星期三调用该函数,返回每个月的第一个,直到12月16日。阵列

我目前使用以下代码为两个日期之间的每一天返回一个日期数组,包括今天的日期和最后一个日期本身。这很有效

  • 然而,我将如何着手修改我在中已经在做的事情 否则,命令执行相同的操作,但返回 日期之间每个星期五的日期数组?例如,如果该函数在2019年10月23日星期三调用,以在11月10日之前的每个星期五返回,则第一个日期将是25日星期五、11月1日,然后是11月8日
  • 除了每个月的第一天,我将如何做与上述相同的事情?如果我在2019年10月23日星期三调用该函数,返回每个月的第一个,直到12月16日。阵列中应包含11月1日和12月1日
func日期(用于日期:字符串)->[String]{
//首先获取结束日期
guard var endDate=Formatter.date.date(from:date)else{return[]}
//对于日历计算,应使用中午时间
endDate=Calendar.current.date(通过设置小时:12,分钟:0,秒:0,of:endDate)!
//让我们今天中午开始吧
var date=Calendar.current.date(通过设置小时:12,分钟:0,秒:0,of:date())!
变量日期:[字符串]=[]
//而日期小于或等于结束日期

当date时,您只需向方法中添加一个weekday参数,并在将其添加到数组之前检查循环中日期的weekday:

extension Formatter {
    static let date = DateFormatter()
}



您可以使用以下工具获取一周中任何一天的工作日:

let weekDayIndex = Calendar.current.component(.weekday, from: Date())
星期五正好是第5天。您可以通过以下方式获得任何一天的名称:

print(Calendar.current.weekdaySymbols[weekDayIndex])
因此,只需循环浏览所有日期,过滤掉工作日不是5天的任何内容,就可以得到答案:

func fridays(in dates: [Date]) {
  dates.filter { Calendar.current.component(.weekday, from: $0) == 5 }
}

查看下一个日历日期(在:匹配:匹配策略:重复时间策略:方向:)
方法作为起点。感谢您的回答。这看起来很好,也很有意义。有两个问题需要回答:1.工作日编号是否基于设备的区域设置?例如,如果设备设置为在不同的日期开始一周,是否总是假定星期五是6而不是5?2.请提供帮助但是对于每个月的第一天。再次感谢。这是低效的。为什么不获得第一个星期五,然后增加1周?为什么为每天创建一个日期,只忽略其中7个中的6个?@ahjnar 1-7 Sunday Saturday将永远不会改变。添加了返回firstDayOfEachMonth@LeoDabus非常感谢,很高兴知道。标记as回答正确。感谢您的回答。如果用户的设备配置为在不同的日期开始一周该怎么办?此回答只是关于筛选现有的日期数组。此回答没有显示如何创建仅为星期五的日期数组。在两天之间的每一天创建一个大的日期数组将非常低效wo的日期,然后过滤大名单下来,只有那些落在星期五。
firstDayOfTheMonth(until: "2019-12-25")  // ["2019-11-01", "2019-12-01"]
let weekDayIndex = Calendar.current.component(.weekday, from: Date())
print(Calendar.current.weekdaySymbols[weekDayIndex])
func fridays(in dates: [Date]) {
  dates.filter { Calendar.current.component(.weekday, from: $0) == 5 }
}