我一直在寻找这个问题的解决方案。
在我的代码中我有
$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');
,它会解决问题吗?
问题是我真的不知道如何测试这个,除非我等到星期天再来一次: - )
答案 0 :(得分:4)
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'));