SwifterSwift / SwifterSwift

A handy collection of more than 500 native Swift extensions to boost your productivity.
https://swifterswift.com
MIT License
13.82k stars 1.61k forks source link

Add Date.numberOfDaysInYear #552

Open nuomi1 opened 5 years ago

nuomi1 commented 5 years ago

Please fill out this template when filing an issue.

All comment lines beginning with an > instruct you with what info we expect. You can delete those lines once you've filled in the info.

[x] I've read, understood, and done my best to follow the Contributing guidelines before opening this issue.

What did you do?

Provide a compute property.

What did you expect to happen?

Get days in year for Date.

What happened instead?

Please replace this with of what happened instead.

SwifterSwift Environment

Demo Project

extension Date {
    var numberOfDaysInYear: Int {
        return Calendar.current.ordinality(of: .day, in: .year, for: self)!
    }
}
let now = Date()

dump(now)
print(now.numberOfDaysInYear)
▿ 2018-08-25 08:43:25 +0000
  - timeIntervalSinceReferenceDate: 556879405.01351404
237
spacelatte commented 5 years ago

imho: name should be numberOfDaysLeftInYear or something like it. because number-of-days-in-year is either 365 or 366 depending on leap-year

guykogus commented 5 years ago

Actually the code example is dayInYear. To get numberOfDaysLeftInYear it would be calculated as such:

extension Date {
    var dayInYear: Int {
        return Calendar.current.ordinality(of: .day, in: .year, for: self)!
    }

    var numberOfDaysInYear: Int {
        return Calendar.current.range(of: .day, in: .year, for: self)!.upperBound - 1
    }

    var numberOfDaysLeftInYear: Int {
        return numberOfDaysInYear - dayInYear
    }
}

Date().numberOfDaysLeftInYear // 81 (for Oct 11, 2018)