2016-08-24 5 views
1

私は、ユーザーに日付を尋ね、APIからの結果を出力するページを作成しました。 apiでは開始日と終了日が必要です。開始日と終了日は7日を超えてはなりません。私はそれを設定したので、ユーザーは日付を入力することができ、終了日は7日後に自動的に設定されます。APIで日付変数を使用

私は日付関数を使用する際に問題が発生しています。ユーザーが選択を入力する前に、今日の日付が自動的に使用されるようになりました。

今日の日付か将来の日付かをユーザーが選択できるようにするために、ユーザーの入力を待つようにAPIコールを呼び出すが、どうすればよいかわからない。

<?php 
    $startDate = date('Y-m-d', strtotime(isset($_GET['start'])? $_GET['start'] :date('Y-m-d'))); 
    $endDate = date('Y-m-d', strtotime('+7 days', strtotime($startDate))); 

if($startDate){ 
    echo "$endDate";   

    $params = array(
    'start_date' => $startDate, 
    'end_date' => $endDate, 
    'api_key' => 'coXJeNygdeuxVKs9yJLecWbfuXsY54Wi9gq37HuN' 
); 


    $data = json_decode(callAPI('GET', 'https://api.nasa.gov/neo/rest/v1/feed', $params)); 

    echo "<h1>Near-Earth Object (NEO) Report between " . $params['start_date'] . " and " . $params['end_date'] . "</h1>"; 

    foreach ($data->near_earth_objects as $date => $count) { 
    echo "<p>" . sizeof($count) . " objects detected on $date</p>"; 

    echo "<ol>"; 
    foreach ($data->near_earth_objects->$date as $near_earth_object) { 
     echo "<li>" . $near_earth_object->name . " <a href='" . $near_earth_object->nasa_jpl_url . "'>" . $near_earth_object->nasa_jpl_url . "</a><br>"; 
     echo "Estimated Diameter: " . $near_earth_object->estimated_diameter->meters->estimated_diameter_min . "-" . $near_earth_object->estimated_diameter->meters->estimated_diameter_max . " metres<br>"; 

     echo "<ul>"; 
     foreach ($near_earth_object->close_approach_data as $close_approach) { 
      echo "<li>Close approach on " . $close_approach->close_approach_date . " velocity " . $close_approach->relative_velocity->kilometers_per_hour . " km/h " . "missing " . $close_approach->orbiting_body . " by " . $close_approach->miss_distance->kilometers . " km</li> "; 
     } 
     echo "</ul></li>"; 
    } 
    echo "</ol>"; 
    } 

    } 
    ?> 
+1

ユーザーに選択肢を与える前にこのコードを呼び出すと、このコードの誤りではありません。あなたはこのコードを呼び出すものであればそれを修正する必要があります。 'strtotime(...、date( 'Y-m-d'))'は単にCPUサイクルの無駄であることに注意してください。 PHPが "今"を取ってそれを文字列に変換し、その文字列を "今"の値に戻して解析するよう強制する上で、** NO **ポイントがあります。単に 'time()'などを渡してください。 –

答えて

1

これは、ほとんどあなたが始めたいと思っています。 if文にelseを追加し、日付が入力されていないときに開始/終了日付を更新してfalseを返すだけです。注:また、ヘッダーをifの上に移動し、日付が表示されている場合はそれを常に表示するように3次条件を追加しました。

<?php 
$startDate = isset($_GET['start']) ? date('Y-m-d', strtotime($_GET['start'])) : false; 
$endDate = $startDate ? date('Y-m-d', strtotime('+7 days', strtotime($startDate))) : false; 

$params = array(
    'start_date' => $startDate, 
    'end_date' => $endDate, 
    'api_key' => 'coXJeNygdeuxVKs9yJLecWbfuXsY54Wi9gq37HuN' 
); 

echo '<h1>Near-Earth Object (NEO) Report', 
    ($startDate ? ' between ' . $params['start_date'] . ' and ' . $params['end_date'] . '</h1>' : '</h1>'); 

if($startDate) { 

    echo "$endDate"; 

    $data = json_decode(callAPI('GET', 'https://api.nasa.gov/neo/rest/v1/feed', $params)); 

    foreach ($data->near_earth_objects as $date => $count) { 
     echo "<p>" . sizeof($count) . " objects detected on $date</p>"; 

     echo "<ol>"; 
     foreach ($data->near_earth_objects->$date as $near_earth_object) { 
      echo "<li>" . $near_earth_object->name . " <a href='" . $near_earth_object->nasa_jpl_url . "'>" . $near_earth_object->nasa_jpl_url . "</a><br>"; 
      echo "Estimated Diameter: " . $near_earth_object->estimated_diameter->meters->estimated_diameter_min . "-" . $near_earth_object->estimated_diameter->meters->estimated_diameter_max . " metres<br>"; 

      echo "<ul>"; 
      foreach ($near_earth_object->close_approach_data as $close_approach) { 
       echo "<li>Close approach on " . $close_approach->close_approach_date . " velocity " . $close_approach->relative_velocity->kilometers_per_hour . " km/h " . "missing " . $close_approach->orbiting_body . " by " . $close_approach->miss_distance->kilometers . " km</li> "; 
      } 
      echo "</ul></li>"; 
     } 
     echo "</ol>"; 
    } 

} else { 

    ?><form action="" method="GET"> 
     <label for="startdate">Please enter a start date (end date will be 7 days after the start date):</label> 
     <input id="startdate" type="date" name="start" /> 
     <input type="submit" /> 
    </form><?php 

} 
+0

ジムに感謝、私は今それを実装します、まさに私がやろうとしていたこと –

関連する問題