为什么是去年';s周在PHP中不会自动更改?
我正在尝试创建一个类似日历的页面。用户可以按带有数字的按钮(即2017)。按下时,会话设置为2017,页面重新加载,函数为什么是去年';s周在PHP中不会自动更改?,php,Php,我正在尝试创建一个类似日历的页面。用户可以按带有数字的按钮(即2017)。按下时,会话设置为2017,页面重新加载,函数week\u date计算所选年份的总周数 相同的功能用于月份 这一切都很好,除了一件事。一年的第一周和最后一周包含另一年的天数。例如:2017年从周日开始。2016年的所有其他日期(周一至周六)。现在,我的剧本不会在那些日子里把年份改为2016年。它保持2017年,因此 2016年12月31日星期六 2017年1月1日星期日 它呼应 2017年12月31日星期六 201
week\u date
计算所选年份的总周数
相同的功能用于月份
这一切都很好,除了一件事。一年的第一周和最后一周包含另一年的天数。例如:2017年从周日开始。2016年的所有其他日期(周一至周六)。现在,我的剧本不会在那些日子里把年份改为2016年。它保持2017年,因此
- 2016年12月31日星期六
- 2017年1月1日星期日
- 2017年12月31日星期六
- 2017年1月1日星期日
$currentJaar = $_SESSION['currentJaar'];
if (!$currentJaar) {
$currentJaar = date("Y");
}
function week_date($week, $year, $dagvdweek){
$date = new DateTime();
return $date->setISODate($year, $week, $dagvdweek)->format('Y-m-d');
}
function getWeekDays($month, $year)
{
$p = new DatePeriod(
DateTime::createFromFormat('!Y-n-d', "$year-$month-01"),
new DateInterval('P1D'),
DateTime::createFromFormat('!Y-n-d', "$year-$month-01")->add(new DateInterval('P1M'))
);
$datesByWeek = array();
foreach ($p as $d) {
$dateByWeek[ $d->format('W') ][] = $d;
}
return $dateByWeek;
}
$datesByWeek = getWeekDays($maandNR, $currentJaar);
foreach ($datesByWeek as $week => $dates) {
$maandag = week_date($week,$currentJaar,1);
$dinsdag = week_date($week,$currentJaar,2);
$woensdag = week_date($week,$currentJaar,3);
$donderdag = week_date($week,$currentJaar,4);
$vrijdag = week_date($week,$currentJaar,5);
$zaterdag = week_date($week,$currentJaar,6);
$zondag = week_date($week,$currentJaar,7);
}
原因很简单:因为您显式地设置了
setISODate($year,$week,$dagvdweek)
,而$year
总是相同的$currentJaar
。您知道我的问题中的方法吗?如何解决这个问题?我建议彻底摆脱week\u date
DatePeriod
已经为您提供了DateTime
对象,您可以->直接格式化这些对象。我需要week\u date
,因为它可以多次使用。生成多个表,所有表都需要给定的周号。至少您调用它的方式有缺陷,在这种情况下是不必要的。同样,它所做的只是格式化给定的日期。您可以直接对DatePeriod
返回的对象执行此操作。问题是您正在将不一致的数据传递给周日
,这将解决这一问题。