【问题标题】:Get a $date between start and end dates on a continuous loop在连续循环中获取开始日期和结束日期之间的 $date
【发布时间】:2010-02-18 10:38:53
【问题描述】:

试图找出实现以下场景的方法:-

用户创建一个初始时间段,例如01/01/2013 至 01/07/2013 以及续订期,例如每 1 个月一次。

我正在开发一个功能,它将:-

  1. 检测函数中传递的日期(可以是任何日期)是否在符合用户要求的时间段内。

例如:-

该函数可以接受以下日期 21/02/2019。基于此,我需要检测用户处于哪个续订期。

我想实现这一点的方法是:-

  1. 在用户的初始开始日期上加一天以获得最新的续订日期。
  2. 将续订期(1 个月)添加到此以获得最新的结束日期。
  3. 继续执行此操作,直到我根据用户续订期类型检测到日期介于哪个开始日期和结束日期之间,例如1 个月。

有点令人困惑,但这种总结了我所追求但不起作用的东西:-

$tmpStartDate=$endDate;   
do{
$tmpStartDate=date("Ymd",strtotime($tmpStartDate .'+1 Day'));
$tmpEndDate=date("Ymd",strtotime($tmpStartDate .'+'.$timingUnitVal .' '.$timingUnit));
} while($date<$tmpStartDate&&$date>$tmpEndDate);

$endDate 是用户最初输入的结束日期。

【问题讨论】:

  • 这看起来像 PHP;如果是,您可能需要标记它。
  • 我认为所写的场景有点混乱,要求也不清楚。我想也许如果你能让逻辑更清晰(即你可以用一两句话解释它),解决方案就会出现。听起来这样做的方法需要使用三个输入值,而不仅仅是一个,也许你需要澄清(听起来你在使用 strtotime() 比较方面是正确的,只是这个问题可以做重写)。

标签: php loops while-loop


【解决方案1】:

根据我从您的问题中收集到的信息,大致符合这些方面的内容会更正确?

function findPeriod($lowerBound, $upperBound, $repeatEvery, $date)
{
  $lowerBound = strtotime($lowerBound);
  $upperBound = strtotime($upperBound);
  $repeatEvery = strtotime('+' . $repeatEvery) - time();
  $date = strtotime($date);

  while ($date >= $lowerBound) {
    if ($date <= $upperBound) {
      return array($lowerBound, $upperBound);
    } else {
      $lowerBound += $repeatEvery;
      $upperBound += $repeatEvery;
    }
  }

  return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多