JSON使用" datetime"创建一个表单来搜索日期范围值

时间:2014-11-04 20:20:42

标签: php json datetime

我正在尝试创建一个搜索JSON的datetime值的表单,并返回用户输入的第一个和最后一个日期之间的信息。我不得不承认,我不知道我是否正确地做到了这一点,到目前为止我还没有能够让它发挥作用。

我的JSON数据如下所示:

{
  "apiVersion": "0.1",
  "data": {
    "offset": 0,
    "limit": 50,
    "count": 50,
    "total": 1008,
    "reports": [
      {
        "type": "STB_EVENT_TIMED",
        "data": {
          "datetime": "2014-11-04T08:25:07-08:00",
          "originator": "6007",
          "roomNumber": "1474",
          "eventItem": "Watched movie 31008",
          "duration": "P0Y0M0DT0H0M45.000S"
        }
      },
      {
        "type": "ROOM_CHARGE",
        "data": {
          "datetime": "2014-11-04T08:25:07-08:00",
          "originator": "6006",
          "roomNumber": "204",
          "chargeItem": "Premium Services",
          "chargeAmountCents": 495
        }
      },

所以我有这个表单,我在其中设置输入的每个文本字段的值,并使用GET方法将它们带入我的TEST.PHP页面。用户输入房间号,以及“2014-11-04”格式输入第一个和最后一个日期。

if(isset($_GET['submit_search'])){ 
    $room_number = $_GET['id'];
  $first_date = $_GET['first_date'];
  $last_date = $_GET['last_date'];
}

在我编写数据格式的PHP脚本中,我尝试创建一个for循环,它接受$i= $first_date; $i<=$last_date; i++并显示JSON中用户设置日期之间的每个行项目。

以下是我的代码片段,我正在尝试输出此信息:

    <?php $matchFound = false; ?>
<?php foreach($output1['data']['reports'] as $reporting): ?>
      <?php if($reporting['type'] == "ROOM_CHARGE" && $reporting['data']['roomNumber'] == $room_number): ?>
        <?php for ($i=$first_date; $i<=$last_date; $i++): ?>
      <tr>
          <td><?php echo 'Room Charge'; ?></td>
          <td><?php echo substr($reporting['data']['datetime'], -26, 10) ?></td>
          <td><?php echo substr($reporting['data']['datetime'], -14, 8) ?></td>
          <td><?php echo ($reporting['data']['roomNumber']) ?>  </td>
          <td><?php echo ($reporting['data']['originator']) ?>  </td>                            
          <td><?php echo ($reporting['data']['chargeItem']) ?></td>
          <td><?php echo number_format(($reporting['data']['chargeAmountCents'])/100, 2, '.', ',') ?></td>
          <td>-</td>              
      </tr>
        <?php endfor; ?>
      <?php elseif($reporting['type'] == "STB_EVENT_TIMED" && $reporting['data']['roomNumber'] == $room_number): ?>
        <?php for ($i=$first_date; $i<=$last_date; $i++): ?>
        <tr>
          <td><?php echo 'Event'; ?></td>
          <td><?php echo substr($reporting['data']['datetime'], -26, 10) ?></td>
          <td><?php echo substr($reporting['data']['datetime'], -14, 8) ?></td>
          <td><?php echo ($reporting['data']['roomNumber'])?>  </td>
          <td><?php echo ($reporting['data']['originator']) ?>  </td>                     
          <td><?php echo ($reporting['data']['eventItem']) ?></td>
          <td>-</td>   
          <td><?php echo substr($reporting['data']['duration'], -10, 2) ?>:<?php echo substr($reporting['data']['duration'], -7, 2) ?>:<?php echo substr($reporting['data']['duration'], -4, 2) ?></td>                
      </tr>
        <?php endfor; ?>
       <?php endif; ?>
    <?php endforeach; ?>

我被for loop挂了。我不确定这是不是应该写的?有没有人知道这是否可以正常工作?如果还有其他方法可以实现这一目标,请指出我正确的方向。我真的想弄清楚这一点。

1 个答案:

答案 0 :(得分:0)

您似乎错过了与endfor匹配<?php for ($i=$first_date; $i=$last_date; $i++): ?>

的行

代码中的第二个可能问题是循环for ($i=$first_date; $i=$last_date; $i++) - 您如何在网页上输入日期? (我看到你正在使用$ _GET)你确定它们会是两个数字,比如20141031和20141107吗?如果是这样,循环将为您提供不存在的日期,如20141099,并且价格计算可能是错误的。

第三个可能的问题是将循环for ($i=$first_date; $i=$last_date; $i++)放在<TR> .. </TR>中 - 您的表格会有很多列而不是很多行。