我有以下代码,这些代码将在今天的13个星期一之后返回。
for($i=1; $i<=13; $i++){
echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
}
我希望能够修改它,这样它不仅可以显示接下来的13个星期一,还可以显示刚刚过去的星期一。
我尝试按如下方式修改代码,但后来又返回了下一个星期一的两个实例。
for($i=-1; $i<=13; $i++){
echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
}
返回数据。
2015-04-13
2015-04-20 //<--
2015-04-20
2015-04-27
2015-05-04
2015-05-11
2015-05-18
2015-05-25
2015-06-01
2015-06-08
2015-06-15
2015-06-22
2015-06-29
2015-07-06
2015-07-13
关于如何实现这一目标的任何想法?
答案 0 :(得分:9)
我会这样做:
for($i =- 1; $i <= 13; $i == 0 ? $i += 2 : $i++){
echo date("Y-m-d", strtotime("$i Monday")) . "<br>";
}
使用三元运算符检查$i
是否为0 - 如果将其增加2而不是1:)
答案 1 :(得分:5)
试试这个:
echo date("Y-m-d", strtotime('-1 Monday'))."<br>";
for($i=1; $i<=13; $i++){
echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
}
或者您只需要一个for
声明?
答案 2 :(得分:4)
function mondays() {
$begin = new DateTime('last monday');
$end = clone $begin;
$end->add(new DateInterval('P14W')); // next 13 + last
$interval = new DateInterval('P1W');
$daterange = new DatePeriod($begin, $interval ,$end);
foreach($daterange as $date){
yield $date;
}
}
foreach(mondays() as $date){
echo $date->format("Y-m-d"), PHP_EOL;
}
答案 3 :(得分:0)
您可以使用:
for($i=-1; $i<=13; $i++){
if($i !== 0){
echo date("Y-m-d", strtotime('+'.$i.' Monday'))."<br>";
}
}
你只需省略$ i为零的情况。
答案 4 :(得分:0)
这应该有用(你也可以测试其他日子!=今天)
//In order to avoid problems with midnight and daylight saving time
$refTime = date("Y-m-d 12:00:00");
for($i=-1; $i<13; $i++){
echo date("Y-m-d", strtotime("$refTime this Monday +".$i*7 ." days"))."<br>";
}
答案 5 :(得分:0)
我的方法将是以下(通过使用DateTime类)
$monday = new DateTime('last monday'); //if today is monday this will return last week's
$oneWeek = new DateInterval('P1W');
for($i=0; $i<=13; $i++){
echo $monday->format('Y-m-d')."<br>";
$monday->add($oneWeek);
}