1

我一直在寻找解决这个问题的方法。

在我的代码中,我有

$start_date = date("Ymd", strtotime('this friday'));
$end_date = date("Ymd", strtotime('this sunday'));

昨天(周日)我注意到输出不正确。似乎 PHP 从星期日开始一周?我想在星期一开始。所以每周,从周一到周日,start_date 应该输出本周的星期五,end_date 应该输出本周的星期日(这就是我使用'this friday'和'this sunday'的原因)。

这是时区问题吗?如果我在date_default_timezone_set('Europe/Amsterdam');上面添加代码会解决问题吗?

问题是我真的不知道如何测试这个,除非我等到又是星期天:-)

4

3 回答 3

4

除非您指定,否则 php 将从今天的任何日期开始,因此它从昨天的星期日开始。

if (date("w")==1){$start_monday = date("Y-m-d");}else{$start_monday = date("Y-m-d", strtotime('last monday'));}

$start_date = date("Y-m-d", strtotime($start_monday.' this friday'));
$end_date = date("Ymd", strtotime($start_monday.' this sunday'));
于 2013-06-17T12:08:13.167 回答
1

ISO8601有从星期一到星期日的周数,PHP 的DateTime类可以处理这个标准。

基本上,您需要做的是为当前日期设置 ISO8601 周数并设置所需的日期,周一 - 周日为 1 - 7,例如:-

$startDate = new \DateTime();
$startDate->setISODate((int)$startDate->format('Y'), (int)$startDate->format('W'), 1);

$endDate = new \DateTime();
$endDate->setISODate((int)$startDate->format('Y'), (int)$startDate->format('W'), 5);

var_dump($startDate->format('D'));
var_dump($endDate->format('D'));

输出:-

string 'Mon' (length=3)
string 'Fri' (length=3)

如果您需要进一步解释,请阅读我链接到的文档以获取更多信息和评论。

于 2013-06-17T13:11:22.213 回答
0

您需要指定“本周”才能使其正常工作。

这是一个例子:

date('Ymd', strtotime('Friday this week'));

date('Ymd', strtotime('Sunday this week'));

于 2019-04-25T11:34:03.053 回答