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

如何生成上周(周一至周日)的日期向量?

生成上周完整日期范围(周一至周日)的解决方案

核心问题是你之前的逻辑只找到了最近的周一,而要得到上周的周一,需要在此基础上再往前推7天,或者先将当前日期回退一周后再定位到周一。下面分几种常用语言给出实现方案:

R 语言实现

方法1:使用lubridate包(推荐)

lubridate处理日期更直观,支持指定周起始为周一:

library(lubridate)

# 获取当前日期
today <- Sys.Date()
# 先回退1周,再向下取整到当周周一(即上周一)
last_monday <- floor_date(today - days(7), unit = "week", week_start = 1)
# 生成周一到周日的日期向量
last_week_dates <- seq(last_monday, last_monday + days(6), by = "day")

# 输出示例:2023-08-21 至 2023-08-27
print(last_week_dates)

方法2:基础R实现(无需额外包)

通过计算日期的周几偏移量来定位:

today <- Sys.Date()
# 基础R中wday返回1=周日,2=周一,...,7=周六
weekday <- as.POSIXlt(today)$wday
# 计算上周一:当前日期到最近周一的偏移量 + 额外回退7天
last_monday <- today - (weekday - 2) - 7
# 生成日期序列
last_week_dates <- seq(last_monday, last_monday + 6, by = "day")

print(last_week_dates)

Python 语言实现

方法1:使用标准库datetime

from datetime import datetime, timedelta

today = datetime.today().date()
# 找到最近的周一:weekday()返回0=周一,6=周日,偏移天数为当前周几的数值
recent_monday = today - timedelta(days=today.weekday())
# 上周一 = 最近周一 - 7天
last_monday = recent_monday - timedelta(days=7)
# 生成周一到周日的日期列表
last_week_dates = [last_monday + timedelta(days=i) for i in range(7)]

# 格式化输出
for date in last_week_dates:
    print(date.strftime("%Y-%m-%d"))

方法2:使用pandas包(适合数据处理场景)

import pandas as pd
from datetime import timedelta

today = pd.Timestamp.today().date()
# 直接生成上周一为起始的7天日期范围
last_monday = pd.Timestamp(today) - pd.DateOffset(weeks=1, weekday=0)  # weekday=0对应周一
last_week_dates = pd.date_range(start=last_monday, periods=7)

# 转为字符串列表输出
print(last_week_dates.strftime("%Y-%m-%d").tolist())

关键逻辑说明

你之前的while循环只处理了「回退到最近周一」,但没有考虑要再往前推一周。正确的思路是:

  1. 先找到最近的周一
  2. 在此日期基础上减去7天,得到上周一
  3. 以上周一为起始,生成连续7天的日期序列,就是上周周一至周日的完整范围

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:26:20