我正在使用 MySQL 查询构建每周报告。首先我按
获得周数SELECT WEEK(CURDATE());
然后我需要显示一周的开始日期(我所在地区的星期一)。如何仅使用 MySQL ?
谢谢!
答案 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))
);
?>