【问题标题】:PHP for cycle with DateTime objects带有 DateTime 对象的 PHP 循环
【发布时间】:2013-08-31 10:32:34
【问题描述】:

我有一个日期数组。我想从特定的开始日期到特定的结束日期,并在每次在数组中找到给定日期时增加一个变量。 Í 尝试使用以下代码 sn-p:

$result = array();  
$iterator = 0;
for ($minDateTime = new DateTime($minDate); $minDateTime <= new DateTime($maxDate);  $minDateTime->add(new DateInterval('P01D'))) {
    if ($minDateTime = $myDateArray[$iterator]) {
        $iterator++;
    }
    array_push($result, "$minDateTime=>$iterator");
}

如果我想运行此代码,我收到以下错误:

Fatal error: Call to a member function add() on a non-object in /home/pivoecom/public_html/teszt/query_test.php on line 34

第 34 行是 for 循环的开始。我阅读了 DateTime 的参考资料,我确信它有一个 add 方法。我试图在 for 循环之外用这条线添加一天,它起作用了......我做错了什么?

【问题讨论】:

  • 这似乎很令人费解。尽管使用此方法stackoverflow.com/questions/9282287/… 观察到了一个看似逻辑错误,但这似乎更令人费解。如果您将 add 呼叫转移到循环之外,您确定它有效吗?
  • 我确定。我尝试了它,因为我认为我的网络服务器上的 PHP 太旧了。但它奏效了。

标签: php arrays datetime for-loop


【解决方案1】:

如果您删除错字,您的代码将起作用:-

if ($minDateTime = $myDateArray[$iterator]) {

应该是:-

if ($minDateTime == $myDateArray[$iterator]) {

或者,可能:-

if ($minDateTime === $myDateArray[$iterator]) {

我喜欢你设置循环的方式,我从来没有想过这样做,我将来肯定会使用它,但是我可能会这样做:-

for ($minDateTime = new DateTime($minDate), $maxDateTime = new DateTime($maxDate); $minDateTime <= $maxDateTime;  $minDateTime->add(new DateInterval('P01D'))) {

这样就不会在每次迭代时创建一个新的 DateTime 对象。

【讨论】:

  • 这是问题谢谢:)。我认为我在一些实例化或更复杂的事情上遇到了问题,但是修改后循环运行正确。
猜你喜欢
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多