strtotime'这周五'和'这个星期天'没有用

问题描述 投票:1回答:3

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

在我的代码中我有

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

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

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

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

php date strtotime
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'));

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)

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


0
投票

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

下面是一个例子:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.