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

时间:2013-06-17 11:56:50

标签: php date strtotime

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

在我的代码中我有

$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');,它会解决问题吗?

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

3 个答案:

答案 0 :(得分: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 :(得分: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)

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

答案 2 :(得分:0)

您需要指定“本周”以使其生效。

这里有个例子:

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

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