Add `quarter` method to date/time (#45009)

Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
matt swanson 2022-07-14 19:43:52 -04:00 committed by GitHub
parent 4f818c7202
commit 959d46ef87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 1 deletions

View File

@ -1,3 +1,9 @@
* Add `quarter` method to date/time
*Matt Swanson*
* Add `urlsafe` option to `ActiveSupport::MessageVerifier` initializer
* Fix `NoMethodError` on custom `ActiveSupport::Deprecation` behavior.
`ActiveSupport::Deprecation.behavior=` was supposed to accept any object

View File

@ -157,6 +157,16 @@ module DateAndTime
end
alias :at_end_of_quarter :end_of_quarter
# Returns the quarter for a date/time.
#
# Date.new(2010, 1, 31).quarter # => 1
# Date.new(2010, 4, 12).quarter # => 2
# Date.new(2010, 9, 15).quarter # => 3
# Date.new(2010, 12, 25).quarter # => 4
def quarter
(month / 3.0).ceil
end
# Returns a new date/time at the beginning of the year.
#
# today = Date.today # => Fri, 10 Jul 2015

View File

@ -92,6 +92,21 @@ module DateAndTimeBehavior
assert_equal date_time_init(2008, 6, 30, 23, 59, 59, Rational(999999999, 1000)), date_time_init(2008, 5, 31, 0, 0, 0).end_of_quarter
end
def test_quarter
assert_equal 1, date_time_init(2005, 1, 1, 0, 0, 0).quarter
assert_equal 1, date_time_init(2005, 2, 15, 12, 0, 0).quarter
assert_equal 1, date_time_init(2005, 3, 31, 23, 59, 59).quarter
assert_equal 2, date_time_init(2005, 4, 1, 0, 0, 0).quarter
assert_equal 2, date_time_init(2005, 5, 15, 12, 0, 0).quarter
assert_equal 2, date_time_init(2005, 6, 30, 23, 59, 59).quarter
assert_equal 3, date_time_init(2005, 7, 1, 0, 0, 0).quarter
assert_equal 3, date_time_init(2005, 8, 15, 12, 0, 0).quarter
assert_equal 3, date_time_init(2005, 9, 30, 23, 59, 59).quarter
assert_equal 4, date_time_init(2005, 10, 1, 0, 0, 0).quarter
assert_equal 4, date_time_init(2005, 11, 15, 12, 0, 0).quarter
assert_equal 4, date_time_init(2005, 12, 31, 23, 59, 59).quarter
end
def test_beginning_of_year
assert_equal date_time_init(2005, 1, 1, 0, 0, 0), date_time_init(2005, 2, 22, 10, 10, 10).beginning_of_year
end

View File

@ -3306,7 +3306,14 @@ NOTE: Defined in `active_support/core_ext/date_and_time/calculations.rb`.
[DateAndTime::Calculations#beginning_of_month]: https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-beginning_of_month
[DateAndTime::Calculations#end_of_month]: https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-end_of_month
##### `beginning_of_quarter`, `end_of_quarter`
##### `quarter`, `beginning_of_quarter`, `end_of_quarter`
The method [`quarter`][DateAndTime::Calculations#quarter] returns the quarter of the receiver's calendar year:
```ruby
d = Date.new(2010, 5, 9) # => Sun, 09 May 2010
d.quarter # => 2
```
The methods [`beginning_of_quarter`][DateAndTime::Calculations#beginning_of_quarter] and [`end_of_quarter`][DateAndTime::Calculations#end_of_quarter] return the dates for the beginning and end of the quarter of the receiver's calendar year:
@ -3320,6 +3327,7 @@ d.end_of_quarter # => Wed, 30 Jun 2010
NOTE: Defined in `active_support/core_ext/date_and_time/calculations.rb`.
[DateAndTime::Calculations#quarter]: https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-quarter
[DateAndTime::Calculations#at_beginning_of_quarter]: https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-at_beginning_of_quarter
[DateAndTime::Calculations#at_end_of_quarter]: https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-at_end_of_quarter
[DateAndTime::Calculations#beginning_of_quarter]: https://api.rubyonrails.org/classes/DateAndTime/Calculations.html#method-i-beginning_of_quarter