我喜欢在产生2年的日期范围内迭代所有周。从两年前的当前一周开始,直到今年的当前一周。
问题是,一年可以有52周或53周,例如:
2015年有53周(第53届是2015-12-28至2016-01-03)
2016年有52周(第52届是2016-12-26至2017-01-01)
所以这是我目前的PHP代码:
# start with the current week 2 years ago
$year = date("Y") - 2;
$week = (int) date("W"); // (int) removes leading zero for weeks < 10
$endYear = date("Y");
$endWeek = (int) date("W");
# iterate through all weeks until now
do {
echo $week. " of ". $year;
$week++;
if ($week > 52) { // or greater 53 ?????????????
$year ++;
$week = 1;
}
}
while ($year < $endYear || $week < $endWeek);
答案 0 :(得分:3)
不要试图跟踪边界,而是让PHP为你做。
$start = new DateTime('-2 years');
$end = new DateTime();
$interval = new DateInterval('P1W');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
echo $date->format('W') . " of ". $date->format('Y') . "\n";
}
答案 1 :(得分:1)
您可以将DateTime
和setISODate
用于以下内容:
$now = new DateTime;
$from = (new DateTime)->setISODate($now->format('Y') - 2, $now->format('W'));
while($from < $now) {
echo $from->format('W Y').'<br />';
$from->modify("1 week");
}
希望这有帮助!
答案 2 :(得分:1)
在Ross Wilson和John Conde的帮助下,我找到了一个解决方案:
$now = new DateTime;
$from = (new DateTime)->setISODate($now->format('Y') - 2, $now->format('W'));
$from->modify("thursday this week"); // see ISO 8601
while($from < $now) {
echo $from->format('W Y').'<br />';
$from->modify("+1 week");
}
重要的是将星期日设定为星期四,因为根据ISO 8601,本周“属于”仍然包含星期四的那一年。