【问题标题】:Do While in php for two different dates在 php 中执行两个不同的日期
【发布时间】:2021-05-09 14:35:59
【问题描述】:

想提醒生效日期,直到满足条件。

代码:-

$effective_date = '2020/09/03';
$last_date = '2020/12/03';

$last_date = new DateTime($last_date);
$effective_date = new DateTime($effective_date);
do{
    $edate = $effective_date->format('Y/m/d');
    echo "<script>alert('".$edate."');</script>";
    $nxtdate = date('Y-m-d', strtotime("+1 months", strtotime($edate)));
    $effective_date = new DateTime($nxtdate);
} while($effective_date > $last_date);

它只提醒一次,但我的期望是应该提醒3次

【问题讨论】:

  • $effective_date &gt; $last_date 从一开始就是假的,因此没有迭代。可能while($effective_date &lt; $last_date) 是您想要的。是“当”而不是“直到”。
  • 另外,不需要 strtotime() 和 date()。您可以直接操作您的 DateTime 对象

标签: php loops datetime while-loop do-while


【解决方案1】:

它只提醒一次,因为您的while 条件不正确。

请注意,只要conditiontruedo { ... } while (condition) 循环将至少运行一次并继续,直到它变为true

while($effective_date &gt; $last_date) 更改为while($effective_date &lt; $last_date)

$effective_date = '2020/09/03';
$last_date = '2020/12/03';

$last_date = new DateTime($last_date);
$effective_date = new DateTime($effective_date);
do{
    $edate = $effective_date->format('Y/m/d');
    echo "<script>alert('".$edate."');</script>";
    $nxtdate = date('Y-m-d', strtotime("+1 months", strtotime($edate)));
    $effective_date = new DateTime($nxtdate);
} while($effective_date < $last_date);

输出:

<script>alert('2020/09/03');</script><script>alert('2020/10/03');</script><script>alert('2020/11/03');</script>

更新

如果您希望在执行循环内的语句之前检查condition,请改用while 循环:

while ($effective_date < $last_date) {
    $edate = $effective_date->format('Y/m/d');
    echo "<script>alert('".$edate."');</script>";
    $nxtdate = date('Y-m-d', strtotime("+1 months", strtotime($edate)));
    $effective_date = new DateTime($nxtdate);
}

【讨论】:

  • Why this gets alerted?如果生效日期更长我不想执行
  • 所以你应该使用while (condition) {...},因为正如我之前所说,do {...} while (condition) 总是至少运行一次(在检查condition 之前)
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多