2016-03-25 25 views
0

Ben php kodlamak için yeni ve bir hava durumu API (http://openweathermap.org) bir çağrı tarafından üretilen bir döngü artan bir tarih alma hakkında bir sorgu var, ben PHP curl kullanıyorum XML'i döndüren ve sonra 3 gün için 3 set veri ile döngü yapıyorum, ilk gün geçerli gün ve sonraki iki sonraki 2 sonraki tarihler. php ile bir döngü içinde tarih artırılması

Ben basit yolu bu gibi geçerli tarih kaydedebilir ve daha sonra kod döngüler bu tarih her şey artırmak için olacağını düşündüm:

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 

> Ne yazık ki bu işe görünmüyor

? Eminim, daha fazla PHP deneyimi olan birisi için bu basit bir çözümdür, ancak bunun neden işe yaramayacağını anlayamıyorum.

REDAKTE: Sadece tarih istiyorum

$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); 

Ama ekran görüntüsüne, döngüler gibi tüm bu tarihlerdeki 3 kez görüntüler ... : Yardımlarınız için teşekkür ederim, ben bu kodu ekleyerek çalıştı Bir kez görüntüleyin, bir sonraki döngü için artırın ve yeni tarihle tekrar görüntüleyin ve bir kez daha görüntüleyin. Bunu yapmanın kolay bir yolu var mı?

Screenshot of application

EDITED: seçenekler inceledikten sonra, en iyi seçenek, PHP kıvırmak olsa veri toplar yolu olabilir XML tarihini toplamaya çalışırken, ben alamıyorum görünüyor görünüyor 'zaman' içindeki verilere. İşte benim yeni kod:

<?php 

$ isteği = // benim API anahtarı eklenir nerede bu StackOverflow'daki

$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 

>

+0

Bu XML tarih var prosedürel içinde php nesne add function kullanabilirsiniz, ancak ben bu işten verileri yakalar gibi görünüyor olabilir. Veriler ile biter, bunların arasında yer alan sözdiziminden veri alabilirim ancak bu ilk zaman sözdiziminden bu verileri almam mümkün görünmüyor. – Emily

+0

Ah, tamam! XML'i asıl soruya yollayacağım .. :) – Emily

+0

Burada yayınlayamadım ama XML verisinin ekran görüntüsü - http://www.emilyfraser.co.uk/Untitled.jpg – Emily

cevap

0

, ancak bunun yerine strtotime kullanmak daha iyidir ..

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

güncelleme

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

Yardımlarınız için teşekkürler, daha sonra bir dahaki sefere arttığında artış tarihini çıkarmak için kodu nasıl alabilirim? Şu anki tarihi ve yarının tarihini görüntüleyen anda, ancak bu tarihlerin her ikisi de çıkıştan ziyade kod döngüleri olarak 3 kez görüntüler: bugünün tarihi, yarının tarihi, bir sonraki günün tarihi. – Emily

+0

Güncelleme için teşekkürler, şimdi çalışıyor, yardımınıza minnettarız :) – Emily

0

üzerine koymak için kaldırdık, ne kadar böyle bir şey? ?

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

Sen mktime işlevini kullanabilirsiniz: Bu fonksiyonu mktime içinde date('d') + 1 kullanımının güvenli olup

$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); 
0

Sen

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

veya

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