【发布时间】:2012-11-27 16:39:00
【问题描述】:
这里是问题的摘要:在星期日,strtotime('this week') 返回下周的开始。
在 PHP 中,一周似乎从星期一开始。但是,在星期日以外的任何一天,这段代码
echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));
输出本周星期一的日期,看起来应该是上周的星期一输出。在这种情况下,PHP 似乎将星期日和星期一都视为一周的开始。现在是 2012 年 12 月 10 日星期一或 2012 年 12 月 10 日。 date('Y-m-d', strtotime('sunday last week')) 返回 2012-12-09 - 昨天。
这是一个错误,还是我遗漏了什么?看起来这个明显的错误应该是众所周知的,但我找不到任何关于它的信息。获得星期开始的唯一方法是在星期天使用一些特殊处理吗?
$week_offset = (int) 'sunday' == date('l');
$week_start = strtotime("-$week_offset monday"); // 1 or 0 Mondays ago
【问题讨论】:
-
也许有时区的恶作剧?你能用绑定到本地DateTimeZone 的DateTime 试试这个吗?另外,您是否更换了服务器的磁通电容器?它们会在一段时间后磨损。 :p
-
我认为 PHP 日期函数的第一天是星期天:w |星期几的数字表示 | 0(星期日)到 6(星期六)
-
@SalmanA,我也是这么想的,但是当我在网站上工作时,我一直注意到周一开始一周的开始。例如,
date('Y-m-d', strtotime('this week');返回星期一的日期。 $format 参数的 week 部分下的大写 W 表示该周从星期一开始:php.net/manual/en/function.date.php italic_W | ISO-8601 年的周数,从周一开始的周数(在 PHP 4.1.0 中添加)_italic 我无法找到任何声明来证明 PHP 的周数从周一开始,除了未经证实的声明论坛和博客文章。 -
@Charles,我试过这个并得到了相同的结果:
$date = new DateTime(); $date->setTimezone(new DateTimeZone('America/Los_Angeles')); $date->setTimestamp(strtotime('last sunday')); echo $date->format('Y-m-d');另外,我检查了一下,我服务器上的准电子通量率应该是......无限的。所以,我认为这不是问题所在。 -
我在这里发布了一个错误报告:bugs.php.net/bug.php?id=63740 随时添加您的反馈。