You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:20:41