在api中使用日期变量

问题描述:

我创建了一个页面,要求用户输入日期并输出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采用“now”的时候有** NO **点,将其转换为一个字符串,然后将该字符串解析为“now”值。只是传递'time()'或其他东西。 –

这几乎是你想要开始的。只需要在if语句中添加一个else,并在没有输入日期时更新开始/结束日期以返回false。注意:我也移动了if上面的标题,并添加了第三个条件来显示日期,如果它已被输入,以便始终显示日期。

<?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

谢谢吉姆,我现在就会实现,那正是我想要做的 –