Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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日期(';W';)与MySQL年周刊(now())_Php_Mysql_Date_Week Number - Fatal编程技术网

PHP日期(';W';)与MySQL年周刊(now())

PHP日期(';W';)与MySQL年周刊(now()),php,mysql,date,week-number,Php,Mysql,Date,Week Number,有人能给我解释一下为什么这两个给出不同的结果吗 我用PHP执行这个 date("YW",mktime(0, 0, 0, 3, 22 , 2013)); // outputs 201312 当我使用MySQL执行此操作时 SELECT YEARWEEK(now()); // outputs 201311 您需要在mysql YEARWEEK调用中指定模式3: SELECT YEARWEEK(now(),3); PHPdate()占位符W根据日期返回周数。这意味着周从周一(而不是周日)开始,

有人能给我解释一下为什么这两个给出不同的结果吗

我用PHP执行这个

date("YW",mktime(0, 0, 0, 3, 22 , 2013)); // outputs 201312
当我使用MySQL执行此操作时

SELECT YEARWEEK(now()); // outputs 201311

您需要在mysql YEARWEEK调用中指定模式3:

SELECT YEARWEEK(now(),3); 
PHP
date()
占位符
W
根据日期返回周数。这意味着周从周一(而不是周日)开始,一年中的第一周是第一周(不是0),而这一周是新年中第一个超过一半天数的周(因此必须是1月到周四)。根据,这种选项组合是模式3

另外,将Alles的注释拉到接受的答案中,因为它很重要:占位符
Y
W
不在一起。如果您想要使用ISO周编号的年份,则应使用
o
而不是
Y
。例如,考虑从2014年12月29日星期一开始的一周:

date('YW', mktime(0,0,0,12,29,2014));  #=> 201401 : 1st week of 2014??
date('oW', mktime(0,0,0,12,29,2014));  #=> 201501 : better
获取第二个(可选)参数,该参数指定一周[0-53]或[1-53]的范围

此函数用于返回日期的周数双参数形式 使用of WEEK()可以指定一周是从星期日开始还是从星期天开始 星期一,以及返回值是否应在0到 53或从1到53。如果忽略模式参数,则 使用默认的\周\格式系统变量

date(W)
是一个始终在[01-53]范围内的变量。因此,我的猜测是,默认情况下,YEARWEEK使用的是[0-53]范围


因此,如果您想要得到相同的结果,请尝试使用1作为
YEARWEEK

的第二个参数,请注意YEARWEEK('2012-01-01',3)=>201152,而PHP“YW”将给出201252。结果中的年份可能与一年中第一周和最后一周的日期参数中的年份不同。(即YEARWEEK中的年份是该周星期一的年份,而不是用于计算的日期的年份)

为了得到正确的结果,你需要

date("oW",mktime(0, 0, 0, 1, 1, 2012)); // outputs 201152
正如“o”表示本周所属的年份


我希望这会有所帮助。

+1作为答案,但如果我想使用YEARWEEK每周汇总数据,并且希望星期天作为一周的第一天,该怎么办?PHP似乎没有更改周开始日期的选项,这是第二个参数(“mode”)指定的。阅读文档链接。。。模式0、2、4和6都是从周日开始的,不同的是第一周是什么时候,以及是第0周还是第53周。@MarkReed抱歉,你没有回答我的问题。我希望PHP等效于MySQL模式6Ah。PHP的
date
函数中没有内置的支持。你得自己算算。谢谢你的这张便条——今天帮我省去了很多困惑和可能的头发撕裂,因为今天是明年的一周。