如何在给定日期的年份和月份中循环显示? 下面是我当前的代码,我无法运行
$Startdate = '2017-01';
$Enddate = '2018-06';
for($selectedDate = date("Y-m",$begin); $selectedDate <= date("Y-m",$end); $selectedDate++){
$resultY = date("Y",strtotime($selectedDate));
$resultM = date("m",strtotime($selectedDate));
echo $resultY;
$echo resulthM;
}
输出应为:
2017 1
2017 2
2017 3
2017 4
2017 5
2017 6
2017 7
2017 8
2017 9
2017 10
2017 11
2017 12
2018 1
2018 2
2018 3
2018 4
2018 5
2018 6
答案 0 :(得分:5)
如果我是您 :),我将尝试使用DateTime
类在您的$Startdate
和$Enddate
之间产生几个月。参见DateTime
<?php
$start = new DateTime('2017-01');
$end = new DateTime('2018-06');
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format("Y-m") . PHP_EOL;
}
答案 1 :(得分:0)
$startDate = new \DateTime('2017-01-01');
$endDate = new \DateTime('2018-06-01');
for($selectedDate = $startDate; $selectedDate <= $endDate; $selectedDate->modify('+1 month')) {
// format $selectedDate;
$resultY = $selectedDate->format('Y');
$resultM = $selectedDate->format('m');
// print content
echo $resultY;
echo "\t"; // print tab
echo $resultM;
echo "\n"; // print new line
}
答案 2 :(得分:0)
由于您熟悉strtotime,因此可以将代码修改为以下内容以执行所需的结果。
$begin = date("Y-m", strtotime("2017-01")); // Replace this with date to begin.
$end = date("Y-m"); // Replace this with date to end.
for($selectedDate = date("Y-m", strtotime($begin)); $selectedDate <= date("Y-m", strtotime($end)); $selectedDate = date("Y-m", strtotime($selectedDate . "+1 Month"))){
$resultY = date("Y", strtotime($selectedDate));
$resultM = date("m", strtotime($selectedDate));
echo $resultY;
echo $resultM;
}
但是,同样,用户也不要生气,我给出的答案将允许您使用DateTime对象并对其进行操作,因此,如果您希望将代码切换到可能更可靠的方式,则可以
答案 3 :(得分:0)
您可以使用DateTime::modify
并向前走几个月
$Startdate = '2017-01';
$Enddate = '2018-06';
$DateTime = new DateTime($Startdate.'-01');
echo $DateTime->format('Y')."\t".$DateTime->format('n')."\n";
do{
$DateTime->modify('+1 months');
echo $DateTime->format('Y')."\t".$DateTime->format('n')."\n";
if($DateTime->format('Y-m') == $Enddate) break;
}while(true);
只需确保Enddate
是有效的年/月并且在Startdate
之后发生,否则在此示例中,您将永远循环播放。
可能还有其他方法可以避免这种情况。
但是我没有在答案中使用DateTime::modify
,所以我想我会把它们放在一起。
输出:
2017 1
2017 2
2017 3
2017 4
2017 5
2017 6
2017 7
2017 8
2017 9
2017 10
2017 11
2017 12
2018 1
2018 2
2018 3
2018 4
2018 5
2018 6
当我想对诸如月之类的东西进行选择/选择时,我通常使用这种方法。但是我使用str_pad($DateTime->format('n'),2,' ',STR_PAD_LEFT).' - '.$DateTime->format('F')
或' 2 - February'
这种格式,请注意左侧的空格... :) ...这样,它们都排列整齐美观。
反正加油!