MySql与PHP一周中某一天的数字表示形式
在我的PHP代码中,我使用日期(“N”)ISO-8601数字表示一周中的第1天(周一)到第7天(周日) 现在,当我想进行查询以搜索特定日期时 我在MySQL中发现:MySql与PHP一周中某一天的数字表示形式,mysql,iso8601,date-format,php,Mysql,Iso8601,Date Format,Php,在我的PHP代码中,我使用日期(“N”)ISO-8601数字表示一周中的第1天(周一)到第7天(周日) 现在,当我想进行查询以搜索特定日期时 我在MySQL中发现: 使用%w的日期格式将返回(0=星期日..6=星期六) DAYOFWEEK(date)将返回(1=星期日..7=星期六) 有没有一种快速的方法可以解决这个问题,而无需执行一些PHP操作 减去或添加一个(PHP或MySQL查询)。尝试匹配 PHP date('N'): Mon Tue Wed Thu Fri Sat Sun 1
- 使用%w的日期格式将返回(0=星期日..6=星期六)
- DAYOFWEEK(date)将返回(1=星期日..7=星期六)
例如,对于当前日期,您可以选择一周的第一天,如下所示:
SELECT DATE_SUB(now(), INTERVAL
IF (DATE_FORMAT(now(), '%w') -1 = -1,
DATE_FORMAT(now(), '%w') + 6,
DATE_FORMAT(now(), '%w') -1) DAY) FIRST_DAY,
now();
让我惊讶的是,没有人在工作日使用mysql。本周从星期一开始 工作日(日期) 返回日期的工作日索引(0=周一,1=周二,…6=周日) 星期五(日期) 返回日期的工作日索引(1=星期日,2=星期一,…,7= 星期六)
在php中,星期日是7,而在MySQL中,星期日是(0或1,取决于您使用的函数),因此您需要添加测试以查看它是0还是7。。。正如我在问题中提到的,没有php修改。。。是否有一个MySQL函数返回与php方法相同的结果?使用DateTime对象将使您的生活更轻松。简单多了。谢谢,我会用PHP来做。。。我认为MYSQL有一个直接的功能来实现这一点。我错了:)如果您愿意,可以使用一个日期参数:选择date_SUB('2010-0101',INTERVAL If(日期格式('2010-0101','%w')-1=-1,日期格式('2010-0101','%w')+6,日期格式('2010-0101','%w')-1)天)第一天,'2010-0101';
SELECT
CASE
WHEN DATE_FORMAT(col, '%w') = 0
THEN 7
ELSE DATE_FORMAT(col, '%w')
END AS dayofweek
...
SELECT (DAYOFWEEK(column)+6)%7 as phpdaten FROM ...
SELECT DATE_SUB(now(), INTERVAL
IF (DATE_FORMAT(now(), '%w') -1 = -1,
DATE_FORMAT(now(), '%w') + 6,
DATE_FORMAT(now(), '%w') -1) DAY) FIRST_DAY,
now();
mysql PHP result
WEEKDAY(date) == date('N' , timestamp) - 1 0: Monday, 1: Tuesday, … 6: Sunday
WEEKDAY(date) + 1 == date('N' , timestamp) 1: Monday, 2: Tuesday, … 7: Sunday
DAYOFWEEK(date) -1 == date('w' , timestamp) 0: Sunday, 1: Monday, … 6: Saturday
DAYOFWEEK(date) == date('w' , timestamp) + 1 1: Sunday, 2: Monday, … 7: Saturday