【问题标题】:Incrementing date in a loop with php使用php在循环中增加日期
【发布时间】:2016-03-25 12:36:16
【问题描述】:

我是 php 编码的新手,我有一个关于在循环中获取日期以递增的查询,该循环是通过调用天气 API (http://openweathermap.org) 产生的,我正在使用返回 XML 的 PHP curl,我然后我循环了3天的3组数据,第一天是当天,接下来的两天是接下来的2个连续日期。

我认为最简单的方法是保存当前日期,然后在每次代码循环时递增该日期,如下所示:

if($numOfItems>0){ // yes, some items were retrieved

        foreach($items as $current){  //open loop
        ?>
        <div style="width:33%;float:left;position:relative;padding:2%" class="WeatherSection">
        <?php

        $myDate = date('d/m/Y');
        echo $myDate;
        var $day = date('d++');
        $day = 'd';

        $summary = $current->symbol['name'];
        echo "<p>$summary</p>";
        ?>
        </div>
        <?php
        }  //close loop

    }  //close code

?>

遗憾的是,这似乎不起作用,我相信对于有更多 PHP 经验的人来说,这是一个简单的修复,但我就是不明白为什么这不起作用......非常感谢任何指导!

已编辑:感谢您的帮助,我尝试添加此代码:

$time = time();
        echo date( 'd/m/Y', $time);
        $time = strtotime('+1 day', $time);
        echo date( 'd/m/Y', $time);
        $time = strtotime('+1 day', $time);
        echo date( 'd/m/Y', $time);

但它会在循环时显示所有这些日期 3 次,请参阅屏幕截图... 我只希望日期显示一次,为下一个循环增加并再次显示新日期,然后再显示一次。有没有简单的方法来做到这一点?

Screenshot of application

已编辑:在查看选项后,似乎尝试从 XML 收集日期可能是最好的选择,虽然 PHP curl 收集数据的方式,但似乎我无法及时获取数据'。这是我的新代码:

<?php

$request = //这是我的 API 密钥被添加的地方,已被删除以放入 StackOverflow

$crl = curl_init(); // creating a curl object
$timeout = 10;
curl_setopt ($crl, CURLOPT_URL,$request);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$xml_to_parse = curl_exec($crl);
curl_close($crl); // closing the curl object

$parsed_xml = simplexml_load_string($xml_to_parse);

// traversing the xml nodes to count how many days were retrieved
// ignore the first one (weatherdata)
$items = $parsed_xml->forecast->time; 
$numOfItems = count($items);

if($numOfItems>0){ // yes, some items were retrieved

        foreach($items as $current){  //open loop

        ?>
        <div style="width:30%;float:left;position:relative;padding:1.5%;margin-top:10px;text-align:center;" class="WeatherSection">
        <?php

        $dateofweather = strval($current->time['day']); //my attempt to retrieve data from the XML
        echo "<p>$dateofweather</p>";

        $summary = $current->symbol['name'];

        echo "<p>$summary</p>";
        $icon = $current->symbol['var'];
        echo "<p><img src='http://localhost:8888/images/weathericons/$icon.png'/></p>";

        $rain = intval($current->precipitation['value']);
        if($rain > 5) { echo "<div class='orange_background'><h5 style='padding:10px'>Very Rainy! Remember to regularly get your roof checked!</h5></div>"; }
        ?>
        </div>
        <div style="width:1px;height:300px;float:left;position:relative;padding:0;margin:5px;margin-top:10px;background:#fff;"></div>
        <?php
        }  //close loop

    }  //close code

?>

【问题讨论】:

  • 它确实在 XML 中有日期,但我似乎无法从中获取数据。数据以 结束,我可以从它们之间的语法中获取数据,但我似乎无法从这个初始时间获取该数据语法。
  • 啊,好的!我将在主要问题中发布 XML .. :)
  • 我无法在此处发布,但这是 XML 数据的屏幕截图 - emilyfraser.co.uk/Untitled.jpg
  • 谢谢你 - 我会得到数据 - 与他们签约 - 这看起来很有趣 :)
  • 感谢 Ryan,我查看了 GitHub 链接,但目前实现它可能超出了我的能力。理想情况下,如果我可以访问保存日期数据的 XML 语法,那就太好了,我将更新我的代码,以便更清楚地了解它的设置方式。我只拿了我在最初帖子中的一部分代码......非常感谢大家的帮助。

标签: php api loops date increment


【解决方案1】:

在函数mktime 中使用date('d') + 1 是安全的,但最好改用strtotime..

$time = time();
echo date( 'd/m/Y', $time);
$time = strtotime('+1 day', $time);
echo date( 'd/m/Y', $time);

更新

$time = time();
for ($i = 0; $i < 3; $i++) {
    echo date( 'd/m/Y', $time);
    $time = strtotime('+1 day', $time);
}

【讨论】:

  • 感谢您的帮助,我如何让代码在下次循环时输出递增的日期?在显示当前日期和明天日期的那一刻,但是当代码循环而不是输出时,它将这两个日期显示 3 次:今天的日期,明天的日期,第二天的日期。
  • 感谢您的更新,现在可以使用了,非常感谢您的帮助 :)
【解决方案2】:

这样的事情怎么样?

$my_date = time();
echo date( 'd/m/Y', $my_date);
$my_date += (24 * 3600); // 24 hours of 3600 seconds
$day = date( 'd', $my_date );

【讨论】:

    【解决方案3】:

    你可以使用mktime函数:

    $today = mktime(0, 0, 1, date('m'), date('d'), date('Y'));
    $today_date = date('d/m/Y', $today);
    
    $tomorrow = mktime(0, 0, 1, date('m'), date('d') + 1, date('Y'));
    $tomorrow_date = date('d/m/Y', $tomorrow);
    

    【讨论】:

      【解决方案4】:

      你可以使用php对象add function

      $date = new DateTime('2016-01-01');
      $date->add(new DateInterval('P1D'));
      echo $date->format('Y-m-d') . "\n";
      

      或在程序中

      $date = date_create('2016-01-01');
      date_add($date, date_interval_create_from_date_string('1 days'));
      echo date_format($date, 'Y-m-d');
      

      【讨论】:

        猜你喜欢
        • 2016-03-02
        • 2015-06-28
        • 2013-06-17
        • 2011-03-28
        • 2022-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        相关资源
        最近更新 更多