diff --git a/doc/default/date.md b/doc/default/date.md index 7abb1aac40..980e40aa54 100644 --- a/doc/default/date.md +++ b/doc/default/date.md @@ -20,4 +20,16 @@ Faker::Date.backward(days: 14) #=> "Fri, 19 Sep 2014" # Random birthday date (maximum age between 18 and 65) # Keyword arguments: min_age, max_age Faker::Date.birthday(min_age: 18, max_age: 65) #=> "Mar, 28 Mar 1986" + +# Random date in current year +Faker::Date.in_date_period #=> # + +# Random date for range of year 2018 and month 2 +# Keyword arguments: year, month +Faker::Date.in_date_period(year: 2018, month: 2) #=> # + +# Random date for range of current year and month 2 +# Keyword arguments: month +Faker::Date.in_date_period(month: 2) #=> # + ``` diff --git a/lib/faker/default/date.rb b/lib/faker/default/date.rb index 8b3e16446b..1d4e10932e 100644 --- a/lib/faker/default/date.rb +++ b/lib/faker/default/date.rb @@ -76,6 +76,30 @@ def birthday(legacy_min_age = NOT_GIVEN, legacy_max_age = NOT_GIVEN, min_age: 18 between(from: from, to: to).to_date end + ## + # Produces a date in the year and/or month specified. + # + # @param month [Integer] represents the month of the date + # @param year [Integer] represents the year of the date + # @return [Date] + # + # @example + # Faker::Date.in_date_period #=> # + # + # @example + # Faker::Date.in_date_period(year: 2018, month: 2) #=> # + # + # @example + # Faker::Date.in_date_period(month: 2) #=> # + # + # @faker.version next + def in_date_period(month: nil, year: ::Date.today.year) + from = ::Date.new(year, month || 1, 1) + to = ::Date.new(year, month || 12, ::Date.civil(year, month || 12, -1).day) + + between(from: from, to: to).to_date + end + private def birthday_date(date, age) diff --git a/test/faker/default/test_faker_date.rb b/test/faker/default/test_faker_date.rb index a01f29614d..f4eb025fcf 100644 --- a/test/faker/default/test_faker_date.rb +++ b/test/faker/default/test_faker_date.rb @@ -144,4 +144,40 @@ def test_default_birthday assert birthday < birthdate_max, "Expect < \"#{birthdate_max}\", but got #{birthday}" end end + + def test_default_in_date_period + current_year = Date.today.year + 10.times do + date = @tester.in_date_period + assert date.year == current_year + end + end + + def test_in_date_period_with_year + year = 2015 + 10.times do + date = @tester.in_date_period(year: year) + assert date.year == year + end + end + + def test_in_date_period_with_month + month = 2 + current_year = Date.today.year + 10.times do + date = @tester.in_date_period(month: month) + assert date.month == month + assert date.year == current_year + end + end + + def test_in_date_period_date + year = 2008 + month = 3 + 10.times do + date = @tester.in_date_period(year: year, month: month) + assert date.month == month + assert date.year == year + end + end end