繁体   English   中英

星期几的数值表示与PHP

[英]numeric representation of the day of the week MySql Vs PHP

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

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

我在MySQL中发现:

  • 使用%wdate_format将返回(0 = Sunday..6 = Saturday)

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

有没有一种不用PHP就能解决此问题的快速方法?

试图匹配...

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

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

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

正如评论中所说

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

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

令我惊讶的是没有人使用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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM