在处理相对日期格式时,我遇到了strtotime()
函数的奇怪行为。
我住在一个国家,一周的第一天不是星期天而是星期一。这个事实应该反映在strtotime()
的输出上。
问题是,无论我设置了什么语言环境(我也试过en_US
语言环境),strtotime()
只是怪异而且周一和周日似乎都不在本周的范围内。见下面的例子。
今天,2014-02-02(或02/02/2014,如果你愿意......多么美好的约会)是星期天。基于此,我试图获得本周的周一和周日日期。两人都没了。
<?php
setlocale(LC_ALL, 'cs_CZ');
$sunday = new DateTime('2014-02-02');
echo '"Today" is Sunday, ' . $sunday->format('Y-m-d') . "\n";
$thisWeekMonday = strtotime('monday this week', $sunday->getTimestamp());
$thisWeekSunday = strtotime('sunday this week', $sunday->getTimestamp());
echo "This week's Monday: " . date('Y-m-d', $thisWeekMonday) . "\n";
echo "This week's Sunday: " . date('Y-m-d', $thisWeekSunday) . "\n";
?>
以上代码输出:
"Today" is Sunday, 2014-02-02
This week's Monday: 2014-02-03
This week's Sunday: 2014-02-09
如果strtotime()
认为一周从星期日开始,它应该已经将2014-02-02作为'本星期日'返回,但事实并非如此。这意味着,根据strtotime()
,一周从星期一开始。在这种情况下,“本星期一星期一”应该返回2014-01-27,但事实并非如此。
这种行为是不合逻辑的。这是一个PHP错误吗?难道我做错了什么?如果这是一个错误,解决此问题的最佳方法是什么?
答案 0 :(得分:0)
很奇怪,这实际上似乎是一个错误。解决方法可能涉及检查“今天是星期天”。如下所示:
$thisWeekSunday = ($sunday->format('w') == 0) ? $sunday->getTimestamp() : strtotime('sunday this week', $sunday->getTimestamp());