Elixir/Phoenix 日期从工作日 + 周数
Posted
技术标签:
【中文标题】Elixir/Phoenix 日期从工作日 + 周数【英文标题】:Elixir/Phoenix date from weekday + weeknumber 【发布时间】:2017-02-07 05:53:47 【问题描述】:是否可以通过提供周数和工作日来获取日期(日、月、年)?基本上我需要查询本周的星期一。
我检查了 Erlang,有 :erlang.date |> :calendar.day_of_the_week
返回工作日。但是,有没有办法扭转这个功能?提供工作日、周数和年份以获取确切日期?
谢谢
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Elixir/Phoenix 日期从工作日 + 周数的主要内容,如果未能解决你的问题,请参考以下文章
从 Phoenix / Elixir GET 函数中调用 Typescript 函数
GraphQL Elixir/Phoenix API:Socket 挂起,响应很大