2017-02-07 3 views
0

Ist es möglich, Datum (Tag, Monat, Jahr) zu erhalten, indem Sie die Wochennummer und den Wochentag angeben? Im Grunde brauche ich Abfrage für diese Woche Montag.Elixir/Phoenix Datum von Wochentag + Wochennummer

Ich habe Erlang überprüft, gibt es :erlang.date |> :calendar.day_of_the_week, die den Wochentag zurückgibt. Gibt es jedoch eine Möglichkeit, diese Funktion umzukehren? Geben Sie Wochentag, Wochennummer und Jahr an, um das genaue Datum zu erhalten?

Danke

Antwort

1

Grundsätzlich ich Abfrage für diese Woche Montag müssen.

Sie die Tag_der_Woche gegen die Tag_der_Woche von Montag Datum vergleichen (1) und subtrahieren, dass viele Tage ab dem Datum:

def monday_in_the_week_of(date) do 
    from_monday = :calendar.day_of_the_week(date) - 1 
    date 
    |> :calendar.date_to_gregorian_days 
    |> Kernel.-(from_monday) 
    |> :calendar.gregorian_days_to_date 
end 

Demo:

defmodule A do 
    def monday_in_the_week_of(date) do 
    from_monday = :calendar.day_of_the_week(date) - 1 
    date 
    |> :calendar.date_to_gregorian_days 
    |> Kernel.-(from_monday) 
    |> :calendar.gregorian_days_to_date 
    end 
end 

for d <- 1..15 do 
    date = {2017, 2, d} 
    IO.inspect {date, A.monday_in_the_week_of(date)} 
end 

Ausgang:

{{2017, 2, 1}, {2017, 1, 30}} 
{{2017, 2, 2}, {2017, 1, 30}} 
{{2017, 2, 3}, {2017, 1, 30}} 
{{2017, 2, 4}, {2017, 1, 30}} 
{{2017, 2, 5}, {2017, 1, 30}} 
{{2017, 2, 6}, {2017, 2, 6}} 
{{2017, 2, 7}, {2017, 2, 6}} 
{{2017, 2, 8}, {2017, 2, 6}} 
{{2017, 2, 9}, {2017, 2, 6}} 
{{2017, 2, 10}, {2017, 2, 6}} 
{{2017, 2, 11}, {2017, 2, 6}} 
{{2017, 2, 12}, {2017, 2, 6}} 
{{2017, 2, 13}, {2017, 2, 13}} 
{{2017, 2, 14}, {2017, 2, 13}} 
{{2017, 2, 15}, {2017, 2, 13}} 
+0

Hey @Dogbert, danke für deine Lösung, alles funktioniert nicht w! – Ilya

Verwandte Themen