MySQL:选择当前星期一的日期

时间:2016-05-31 06:57:48

标签: mysql

我正在使用 MySQL 查询构建每周报告。首先我按

获得周数
SELECT WEEK(CURDATE());

然后我需要显示一周的开始日期(我所在地区的星期一)。如何仅使用 MySQL

谢谢!

7 个答案:

答案 0 :(得分:16)

如果您需要当周星期一的日期 试试这个:

SELECT DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY)

它返回你当周的星期一日期。

答案 1 :(得分:5)

实际上,DATE_ADD不是必需的,并且使逻辑复杂化。这是"本周第一天的日期"的最简单版本:

select date(curdate() - interval weekday(curdate()) day)

将转换为: 获取(当前日期 - N天的间隔)的date()部分 其中N =今天的星期数,即星期四是3号(从星期一开始的一周)

然后,获得上周的星期一,是:

select date(curdate() - interval weekday(curdate()) day - interval 1 week)

这是更可读的恕我直言。

答案 2 :(得分:2)

对于那些需要当前一周的星期一日期的人。

如果您将星期一视为一周的第一天:

SELECT STR_TO_DATE(CONCAT(YEARWEEK(NOW(), 1),'Monday'), '%x%v %W');

如果您将星期日视为一周的第一天:

SELECT STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W');

答案 3 :(得分:1)

SELECT DATE_ADD((SELECT curdate() - INTERVAL (WEEKDAY(curdate())+1)DAY),INTERVAL 1 DAY) as current_monday

答案 4 :(得分:0)

实际上,我们取代日期,而不是添加日期。只是更简单的表达:

DATE_SUB( CURDATE(), INTERVAL WEEKDAY( CURDATE() )

答案 5 :(得分:0)

-- current week monday
 (SELECT DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY)) 

-- current week friday  
SELECT DATE_ADD((SELECT DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY)),INTERVAL 4 DAY);

-- next week monday 
SELECT date(curdate() - interval weekday(curdate()) day + interval 1 week);

-- next week friday 
SELECT DATE_ADD((SELECT date(curdate() - interval weekday(curdate()) day + interval 1 week)),INTERVAL 4 DAY);

答案 6 :(得分:-1)

您可以使用:

<?php 
    $week = date('W');
    $year = date('Y');
    echo $date1 = date(
        'Y-m-d', 
        strtotime($year . 'W' . str_pad($week, 2, '0', STR_PAD_LEFT))
    );
    ?>