Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我如何计算下一周的人数?_Php_Mysql_Str To Date - Fatal编程技术网

Php 我如何计算下一周的人数?

Php 我如何计算下一周的人数?,php,mysql,str-to-date,Php,Mysql,Str To Date,我需要计算一周后的周数。这对于一年中的大多数周来说都是微不足道的,但在年底/年初就不是了。例如,如果我需要知道2013年第52周的下一周 我想使用defaul_week_格式3,即。 a这几周从星期一开始,而不是星期天 b一年内的编号从1开始,而不是从0开始 第1周是今年第一个超过3天的周 我的方法如下,例如,计算2014年第36周后的一周: SELECT WEEK(DATE_ADD(STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W'), INTERVAL 1

我需要计算一周后的周数。这对于一年中的大多数周来说都是微不足道的,但在年底/年初就不是了。例如,如果我需要知道2013年第52周的下一周

我想使用defaul_week_格式3,即。 a这几周从星期一开始,而不是星期天 b一年内的编号从1开始,而不是从0开始 第1周是今年第一个超过3天的周

我的方法如下,例如,计算2014年第36周后的一周:

SELECT WEEK(DATE_ADD(STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W'), INTERVAL 1 WEEK))
对于这个例子,我计算第36周的星期二,加上一周,然后计算这一天的星期。这会起作用,但即使不增加一周,我也有一种奇怪的行为:

它适用于默认的\u周\u格式0:

SET @@local.default_week_format=0;
SELECT STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W');
-> Tuesday of week 36 is 2014-09-09
SELECT week('2014-09-09');
-> 2014-09-09 is in week 36
到目前为止,一切顺利:第36周的周二是第36周

但是这个简单的实验不适用于默认的_week _格式3:

SET @@local.default_week_format=3;
SELECT STR_TO_DATE('W36 2014 Tuesday', 'W%V %X %W');
-> Tuesday of week 36 is 2014-09-09
-> This is wrong, because numbering should start with 1 (instead of 0 now)!
-> Tuesday of week 36 should be 2014-09-02
SELECT week('2014-09-09');
-> 2014-09-09 is in week 37
MySQL告诉我第36周的星期二是第37周

我对此的唯一解释是:

周将考虑默认的周格式 str_to_date忽略默认的_week_格式 如何强制MySQL函数str_to_date使用默认的_week_格式

或者:我如何计算下一周的人数? 我也可以用PHP来做,但是我从MySQL数据库中获得了几周的数据


谢谢你的帮助

我认为您必须使用Week和mode参数

mysql> SELECT WEEK('2008-02-20',0);
        -> 7
mysql> SELECT WEEK('2008-02-20',1);
        -> 8
请看这里:
我也面临着同样的问题。我的解决方案——也许不是最好的,但它是有效的

正如您已经提到的:大多数案例都很琐碎,您只需要知道年末/年初。因此,我只在下表中存储所需年数的相关周数:

CREATE TABLE `NEXT_WEEK_TAB` (
  `CUR_WEEK`  varchar(8) NOT NULL,
  `NEXT_WEEK` varchar(8) NOT NULL,
  PRIMARY KEY (`CUR_WEEK`,`NEXT_WEEK`)
)
使用当前算法,您将获得下一周:

following_week = (SELECT next_week 
                  FROM   next_week_tab 
                  WHERE  cur_week = <your_current_week>);
if !following_week then following_week++;

正如我所说:可能不是最好的解决方案,但它非常简单——而且很有效。

谢谢你的回答,但它并不能解决我的问题。这基本上就是我使用SET命令所做的。问题不在于考虑设置的函数周,而是忽略设置的函数str_to_date谢谢,Pete,很好的方法。我对它做了一点修改:我只存储例外情况,即以53周为一周的年份,例如2015年,并将下一周计算为增量mod 52。我在异常表中只有几个条目,并将第52周作为标准案例处理。