SQL WEEK() 给出的周数与 date('W') 不同


SQL WEEK() gives different week number than date('W')

SQL 函数Select WEEK(mydate) ...返回的周数与 PHP 函数不同的周数date('W',strtotime($mydate))

其中$mydate是格式(Y-m-d h:i:s)通过选择 SQL 数据库上的mydate变量获得的字符串。

这只是一周的差异数,但由于 0 和 52 的边缘情况,我无法减去,它们在那里混淆了。

我知道WEEK(mydate,3)会使它们相等,但我无法更改 SQL 语句,我需要在 PHP 计算中更改它。

如何更改函数日期('W',strtotime($data((,以便它给我一个等于 SQL 的一周?

提前谢谢。

  1. 您无法更改 PHP 计算周数的方式。
  2. 您不应该尝试"滚动"周计算。日期数学很复杂。

最好的解决方案是更改查询以使用 WEEK(mydate, 3) ,但如果没有,您应该将计算卸载到从以下位置检索其他一周数据的同一 MySQL 服务器:

$example_date = '2014-12-16';
$query = sprintf("SELECT WEEK('%s')", $example_date);
if( ! $res = $dbh->query($query) ) { die('fission mailed'); }
$val = $res->fetch();
printf("Week number: %d'n", $val[0]);
// Week number: 50

也许在 php 中尝试这样的事情

strftime(%U, strtotime($mydate))

查看 https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_default_week_format

如果无法更改查询本身,则可以更改该变量。(尽管如果您无法更改查询,则可能无法这样做(。