2016-08-24 3 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

짐 감사합니다, 지금 구현할 것입니다. –