Module: Redmine::Utils::DateCalculation
- Included in:
- CalendarsHelper, Issue, IssueRelation, Helpers::Gantt
- Defined in:
- lib/redmine/utils/date_calculation.rb
Instance Method Summary collapse
-
#add_working_days(date, working_days) ⇒ Object
Adds working days to the given date.
-
#next_working_date(date) ⇒ Object
Returns the date of the first day on or after the given date that is a working day.
-
#non_working_week_days ⇒ Object
Returns the index of non working week days (1=monday, 7=sunday).
-
#working_days(from, to) ⇒ Object
Returns the number of working days between from and to.
Instance Method Details
#add_working_days(date, working_days) ⇒ Object
Adds working days to the given date
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/redmine/utils/date_calculation.rb', line 43 def add_working_days(date, working_days) if working_days > 0 weeks = working_days / (7 - non_working_week_days.size) result = weeks * 7 days_left = working_days - weeks * (7 - non_working_week_days.size) cwday = date.cwday while days_left > 0 cwday += 1 unless non_working_week_days.include?(((cwday - 1) % 7) + 1) days_left -= 1 end result += 1 end next_working_date(date + result) else date end end |
#next_working_date(date) ⇒ Object
Returns the date of the first day on or after the given date that is a working day
63 64 65 66 67 68 |
# File 'lib/redmine/utils/date_calculation.rb', line 63 def next_working_date(date) cwday = date.cwday days = 0 days += 1 while non_working_week_days.include?(((cwday + days - 1) % 7) + 1) date + days end |
#non_working_week_days ⇒ Object
Returns the index of non working week days (1=monday, 7=sunday)
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/redmine/utils/date_calculation.rb', line 71 def non_working_week_days @non_working_week_days ||= begin days = Setting.non_working_week_days if days.is_a?(Array) && days.size < 7 days.map(&:to_i) else [] end end end |
#working_days(from, to) ⇒ Object
Returns the number of working days between from and to
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/redmine/utils/date_calculation.rb', line 24 def working_days(from, to) days = (to - from).to_i if days > 0 weeks = days / 7 result = weeks * (7 - non_working_week_days.size) days_left = days - weeks * 7 start_cwday = from.cwday days_left.times do |i| unless non_working_week_days.include?(((start_cwday + i - 1) % 7) + 1) result += 1 end end result else 0 end end |