【问题标题】:Elixir/Phoenix date from weekday + weeknumberElixir/Phoenix 日期从工作日 + 周数
【发布时间】:2017-02-07 05:53:47
【问题描述】:

是否可以通过提供周数和工作日来获取日期(日、月、年)?基本上我需要查询本周的星期一。

我检查了 Erlang,有 :erlang.date |> :calendar.day_of_the_week 返回工作日。但是,有没有办法扭转这个功能?提供工作日、周数和年份以获取确切日期?

谢谢

【问题讨论】:

    标签: date elixir phoenix-framework


    【解决方案1】:

    基本上我需要查询本周的星期一。

    您可以将日期的 day_of_the_week 与星期一 (1) 的 day_of_the_week 进行比较,然后从日期中减去该天数:

    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
    

    演示:

    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
    

    输出:

    {{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}}
    

    【讨论】:

    • 嘿@Dogbert,感谢您的解决方案,现在一切正常!
    【解决方案2】:

    是否可以通过提供周数和工作日来获取日期(日、月、年)?

    也许这样的事情会起作用:

    @doc """
    iex>get_date(1, 1, 2018)
    {:ok, ~D[2018-01-01]}
    """
    def get_date(weekday, _week_number, _year)
        when weekday < 1 or weekday > 7,
        do: {:error, "invalid weekday: #{inspect(weekday)}"}
    
    def get_date(_weekday, week_number, _year)
        when week_number < 0 or week_number > 51,
        do: {:error, "invalid week_number: #{inspect(week_number)}"}
    
    def get_date(weekday, week_number, year) do
      case Date.new(year, 1, 1) do
        {:ok, first_day_of_year} ->
          Date.add(first_day_of_year, week_number * 7 + weekday - 1)
    
        {:error, error} ->
          {:error, error}
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多