获取从当月第一天到今天的天数 Swift

Posted

技术标签:

【中文标题】获取从当月第一天到今天的天数 Swift【英文标题】:Get an Array of days from first day of the month till today Swift 【发布时间】:2016-11-01 16:48:34 【问题描述】:

我是 ios 和编程的新手,我需要以某种方式从当月的第一天到今天获取一个数组。和一个阵列过去 3 个月到今天,但我不知道该怎么做,请任何帮助或想法?

我检查了这个以获得每月的第一天:

extension Date 
func startOfMonth() -> Date? 
    let comp: DateComponents = Calendar.current.dateComponents([.year, .month, .hour], from: Calendar.current.startOfDay(for: self))
    return Calendar.current.date(from: comp)!

但它只能在 ViewController 中工作,如果在我的项目的其他部分这样做该怎么办?而且我不知道如何迭代数组以获取第一天到今天之间的所有天...

编辑

我做了这样的事情,但它给了我一个无限循环..我做错了什么?

    func weatherDatesFromCurrentDayMonth() -> [Any] 
    var date = Date()
    let currentCalendar = Calendar.current
    var dateComponents = DateComponents()
    dateComponents.month = -1
    //  dateComponents.day = 1
    let endingDate = Calendar.current.date(byAdding: dateComponents, to: date)
    print("\(endingDate!)")
      var datesArray = Array<Any>()

    while date.compare(endingDate!) != ComparisonResult.orderedAscending
    
        var dateComponents = DateComponents()
        dateComponents.day = 1
        date = Calendar.current.date(byAdding: dateComponents, to: date)!
        datesArray.append(date)
        print("\(datesArray)")
    

    return [datesArray]


【问题讨论】:

【参考方案1】:

你有一个无限循环,因为一开始你的endingDate 已经是一个月前了,而date 是现在。由于在循环内你只增加date 它永远不会总是在endingDate 之后,因此你的条件总是true

试试这个代码:

func weatherDatesFromCurrentDayMonth() -> [Date] 
    let now = Date()
    var currentDate = previousMonth(date: now)
    var datesArray = [Date]()

    while currentDate < now 
        datesArray.append(currentDate)
        currentDate = nextDay(date:currentDate)
    
    print("result: \(datesArray)")
    return datesArray


func nextDay(date: Date) -> Date 
    var dateComponents = DateComponents()
    dateComponents.day = 1
    return Calendar.current.date(byAdding: dateComponents, to: date)!


func previousMonth(date: Date) -> Date 
    var dateComponents = DateComponents()
    dateComponents.month = -1
    return Calendar.current.date(byAdding: dateComponents, to: date)!

【讨论】:

以上是关于获取从当月第一天到今天的天数 Swift的主要内容,如果未能解决你的问题,请参考以下文章

mysql如何计算每个月第一天到当前日期的天数?

仅获取从一周的第一天到一周的当前日期的数据

JavaScript怎么获得某一天的前一天日期

java获取当月的第一天和最后一天,获取本周的第一天和最后一天

获取当月的第一天和最后一天示例

java 获取当月第一天和最后一天 获取前一个月第一天和最后一天