这是我用for循环显示日期的代码。
主题:我创建一个脚本来生成到期付款(从开始)。
$y = 1;
$period = 3;
$start = date('m/15/Y');
echo "<table>";
echo '<thead><th>From</th>';
echo '<th>To</th></thead>';
for ($y; $y <= $period; $y++) {
$month_mid = date("m/15/Y", strtotime($start));
$month_last = date("m/t/Y", strtotime($start));
echo '<td>'.$month_mid = date("m/t/Y", strtotime($start)).'</td>';
echo '<td>'.$month_last = date("m/15/Y", strtotime($start)).'</td></tr>';
$start = date("m/d/Y",strtotime($start." +1month"));
}
echo '</table>';
输出我得到:
09/15/2017 09/30/2017
10/15/2017 10/31/2017
11/15/2017 11/31/2017
我希望看起来像这样:
09/15/2017 09/30/2017
09/30/2017 10/15/2017
10/15/2017 10/31/2017
我是最新的日期php希望你能帮助我,谢谢。
答案 0 :(得分:0)
你走了:
$y = 1;
$period = 5;
$start = date('m/15/Y');
echo "<table>";
echo '<thead><th>From</th>';
echo '<th>To</th></thead>';
for ($y; $y <= $period; $y++) {
$month_mid = date("m/15/Y", strtotime($start));
$month_last = date("m/t/Y", strtotime($start));
echo '<tr><td>'.$month_mid = date("m/t/Y", strtotime($start)).'</td>';
echo '<td>'.$month_last = date("m/15/Y", strtotime($start)).'</td></tr>';
$start = date("m/d/Y",strtotime($start." +1month"));
}
echo "</table>";
您错过了table
和<tr>
的开放和封闭。
答案 1 :(得分:0)
您不希望在循环中跳过一个月。好吧,不是你在这里做的方式。
您应该使用DatePeriod::getEndDate
和DatePeriod::getStartDate
以及DateTime::add
来跳过半月金额。我们的想法是,只允许日期时间API在给定的开始日期添加15天,并使用它来计算月中和月末的日期,从而进入下个月。
将所有内容保存在这些日期对象中,直到您需要格式化并打印它们为止,并将第二个保存在对中,作为下一轮循环的输入,您必须计算新的第二个值。< / p>
我觉得你可以编写一个函数,从该月的任何其他第一个或最后一个日期获得“下一个”日期,以简化循环。
(由于这是半月刊,而不是每两周一次,你实际上可以在你的时期走几个月,硬编码一个值的第15个,并使用你的月末函数。这取决于关于您的要求以及API的复杂程度。)
或强>
对于您所期间的每个月,计算月中(即从月初开始恰好15天)和月末日期。将它们保存在某种对联的集合中。
编写一个显示例程,该例程接受此Collection并输出日期,但将以前格式化的字符串保存在对联中的第二个项目作为要打印的第一个项目(在第一行之后)。
我实际上更喜欢这个,因为它将表示与数据抽象分开,允许您自由地显示和格式化您认为合适的日期。
但是,在一天结束时(双关语并非意图,但这是一个很好的双关语),当您可以访问标准化的纪元表示时,请停止使用日期字符串作为输入来计算其他日期。这只会导致疯狂。
答案 2 :(得分:0)
Array
结果:
var arr = Array(1, 2, "Hello");
console.log(arr); // [1, 2, "Hello"]