如何获取指定DateTime所属一周的全部日期?
如何获取某个DateTime对象所属一周的全部日期?
示例:输入DateTime.utc(2022, 12, 21),期望得到结果:周一(19)-周二(20)-周三(21)-周四(22)-周五(23)-周六(24)-周日(25)
实现思路
核心是先定位目标日期所在周的周一,再生成后续6天的日期,最后格式化拼接成指定格式。
完整代码示例(Elixir)
defmodule WeekDates do def get_week_dates(%DateTime{} = date) do # 获取星期序号(1=周一,7=周日) day_num = Calendar.day_of_week(date, :monday) # 推导本周一的日期 monday = DateTime.add(date, -(day_num - 1) * 86400, :second) 0..6 |> Enum.map(fn days -> DateTime.add(monday, days * 86400, :second) end) |> Enum.map(fn dt -> weekday = case Calendar.day_of_week(dt, :monday) do 1 -> "周一" 2 -> "周二" 3 -> "周三" 4 -> "周四" 5 -> "周五" 6 -> "周六" 7 -> "周日" end "#{weekday}(#{dt.day})" end) |> Enum.join("-") end end # 测试调用 WeekDates.get_week_dates(DateTime.utc(2022, 12, 21)) # 输出结果:"周一(19)-周二(20)-周三(21)-周四(22)-周五(23)-周六(24)-周日(25)"
关键细节说明
Calendar.day_of_week(date, :monday):明确指定周起始为周一,避免默认以周日为起始的计算偏差。DateTime.add/3:通过加减每日秒数(86400秒)调整日期,确保UTC时间下的日期计算准确。- 格式化逻辑:通过匹配星期序号映射为中文星期名称,再与日期数字拼接成目标格式。
内容的提问来源于stack exchange,提问作者Laddybug Little
相关产品推荐
相关产品推荐

