You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何根据当前日期获取每周起始日(周一)的日期?

获取每周起始日(周一)的实现方法

我来帮你解决这个以周一作为每周起始日的日期计算问题,下面根据不同的常用工具场景,整理了对应的实现方案:

Excel/Google Sheets 实现

在Excel或Google Sheets里,我们可以借助WEEKDAY函数来计算。默认情况下WEEKDAY以周日为一周的第1天,所以我们需要通过参数调整,把周一设为第1天:

  • 如果要计算当前日期对应的周一:
    =TODAY()-WEEKDAY(TODAY(),2)+1
    
  • 如果要计算指定单元格(比如A1)中日期对应的周一:
    =A1-WEEKDAY(A1,2)+1
    

逻辑解释

WEEKDAY(date,2)会返回1(周一)到7(周日)的数字,用目标日期减去这个数字再加1,就能倒推到本周的周一。比如:

  • 27-Mar-18是周二,WEEKDAY返回2,27-2+1=26,得到26-Mar-18
  • 31-Mar-18是周六,WEEKDAY返回6,31-6+1=26,得到26-Mar-18
  • 24-Mar-18是周六,WEEKDAY返回6,24-6+1=19,得到19-Mar-18

Python 实现

如果用Python处理,可以借助datetime模块来完成日期计算,下面是一个可复用的函数:

from datetime import datetime, timedelta

def get_week_start(date_str=None):
    # 处理日期输入:默认用当前日期,也可以传入指定日期字符串(格式如"27-Mar-18")
    if date_str is None:
        current_date = datetime.today()
    else:
        current_date = datetime.strptime(date_str, "%d-%b-%y")
    
    # datetime.weekday()返回0=周一,6=周日,减去对应天数得到周一
    week_start_date = current_date - timedelta(days=current_date.weekday())
    
    # 格式化为你需要的"dd-Mon-yy"格式返回
    return week_start_date.strftime("%d-%b-%y")

# 测试示例
print(get_week_start("27-Mar-18"))  # 输出: 26-Mar-18
print(get_week_start("31-Mar-18"))  # 输出: 26-Mar-18
print(get_week_start("24-Mar-18"))  # 输出: 19-Mar-18

MySQL 实现

在MySQL中,可以用DATE_SUBWEEKDAY函数组合来计算:

  • 计算当前日期的周一:
    SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), '%d-%b-%y') AS week_start;
    
  • 计算指定日期(比如2018-03-27)的周一:
    SELECT DATE_FORMAT(DATE_SUB('2018-03-27', INTERVAL WEEKDAY('2018-03-27') DAY), '%d-%b-%y') AS week_start;
    

逻辑解释

MySQL的WEEKDAY(date)返回0(周一)到6(周日)的数字,用DATE_SUB减去对应的天数,就能得到本周的起始周一,最后用DATE_FORMAT格式化为你需要的字符串样式。

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

火山引擎 最新活动