2016-09-29 2 views

Antwort

0

Sie diesen Code verwenden können. Die Werte wurden verwendet, um in der Frage geliefert month = 2,week_number = 2 und year = 2016

month = 2 
year = 2016 
week_number = 2 
FIRST_DAY = 1 #first day of every month 
day = { monday: 1, tuesday: 2, wednesday: 3, thursday: 4, friday: 5, saturday: 6, sunday: 7} 

first_wk_of_month = Date.new(year, month, FIRST_DAY).cweek #=> 05 
date_week_num = first_wk_of_month + (week_number - 1) #=> 06 

date = Date.commercial(year, date_week_num, day[:monday]).to_s # 2016-02-08 

Es gibt Wochen in einem Jahr und ein Monat so niedrig wie 1 Tag in einer Woche, wenn es am Sonntag beginnt. Berücksichtigt man dies,

first_wk_of_month findet die Wochennummer im Jahr (zwischen 1 und 52), auf dem der betreffende Monat beginnt.

date_week_num findet die tatsächliche Wochennummer in dem Jahr, in dem das Datum fällt. In diesem Szenario die zweite Februarwoche ist es wieder 6 die 6. Woche des Jahres darstellt

Vorbei an der date_week_num und die day zum Date.commercial ermöglicht es uns, die date
getestet es mit ein paar Tagen zu finden und funktioniert gut . Sie könnten wahrscheinlich die Variablennamen ändern. Hoffe das löst deine Herausforderung

+0

Vielen Dank Black Enigma! Das funktioniert sehr gut! –

+0

Kein Problem, gerne helfen! –

0

Ein Weg, dies zu tun wäre

weekday_index = {monday: 1, tuesday: 2, wednesday: 3, thursday: 4, friday: 5, saturday: 6, sunday: 7} 
day_in_a_week = 7 
year = year_param # 2016 
month = month_param # 8 
week_number = 2 
day_of_month = (week_number * days_in_a_week) - (days_in_a_week - weekday_index[:monday]) 
Date.new(year, month, day_of_month).to_s 
+0

Hallo Sean. Vielen Dank für die schnelle Antwort. Das ist richtig, wenn der Monat mit Montag um 1 beginnt. Wenn ich die Parameter auf Monat Nummer 3 (März) setze: Jahr: 2016 Monat: 3 Woche des Monats: 2 Wochentag: Montag day_of_month = 8 aber sollte 7 sein –

Verwandte Themen