星期几的数字表示MySql对PHP

时间:2012-11-08 18:27:12

标签: mysql iso8601 date-format php

在我的PHP代码中,我使用日期(“N”)ISO-8601数字表示第1周(星期一)到7(星期日)的日期。

现在,当我想查询以搜索特定日期时。

我在MySQL中发现:

  • 使用%w date_format 将返回(0 =星期日... 6 =星期六)

  • DAYOFWEEK(日期)将返回(1 =星期日... 7 =星期六)

有没有快速解决此问题的方法而不做一些PHP

5 个答案:

答案 0 :(得分:2)

试图匹配......

PHP date('N'):

Mon Tue Wed Thu Fri Sat Sun
1   2   3   4   5   6   7

其中一个......

MySQL DATE_FORMAT(col, '%w'):

Mon Tue Wed Thu Fri Sat Sun
1   2   3   4   5   6   0

MySQL DAYOFWEEK(col):

Mon Tue Wed Thu Fri Sat Sun
2   3   4   5   6   7   1

我会在CASE使用DATE_FORMAT语句,因为您只需要担心星期天。

SELECT
    CASE
        WHEN DATE_FORMAT(col, '%w') = 0
            THEN 7
        ELSE DATE_FORMAT(col, '%w')
   END AS dayofweek
...

答案 1 :(得分:1)

原样said in the comments

减去或添加一个(PHP或MySQL查询)。

答案 2 :(得分:1)

SELECT (DAYOFWEEK(column)+6)%7 as phpdaten FROM ...

答案 3 :(得分:0)

令我惊讶的是,没有人使用mysql WEEKDAY。在ISO -8601,星期一星期一开始。

  

WEEKDAY(日期)

     

返回日期的工作日索引(0 =星期一,1 =星期二,... 6 =星期日)。

     

DAYOFWEEK(日期)

     

返回日期的工作日索引(1 =星期日,2 =星期一,...,7 =   星期六)。

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

答案 4 :(得分:-1)

例如,对于当前日期,您可以按如下方式选择一周的第一天:

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();