MySql与PHP一周中某一天的数字表示形式

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

在我的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 2 3 4 5 6 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