如何根据当前日期获取每周起始日(周一)的日期?
获取每周起始日(周一)的实现方法
我来帮你解决这个以周一作为每周起始日的日期计算问题,下面根据不同的常用工具场景,整理了对应的实现方案:
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_SUB和WEEKDAY函数组合来计算:
- 计算当前日期的周一:
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




