dongxiane0395 2013-08-13 10:07
浏览 31
已采纳

PHP SimpleXML在给定的日期范围内开始

I have problems to get all events from an XML-file with a startdate between a given date range.

My XML file looks like this:

    <events>
    <event_data>
        <id>1</id>
        <startdate realdate="2013-08-06">1375740000</startdate>
        <enddate realdate="2013-08-13">1376344800</enddate>
    </event_data>

    <event_data>
        <id>2</id>
        <startdate realdate="2013-08-10">1376085600</startdate>
        <enddate realdate="2013-08-17">1376690400</enddate>
    <event_data>

    <event_data>
        <id>3</id>
        <startdate realdate="2013-08-17">1376690400</startdate>
        <enddate realdate="2013-08-24">1377295200</enddate>
    </event_data>

    <event_data>
        <id>4</id>
        <startdate realdate="2013-08-24">1377295200</startdate>
        <enddate realdate="2013-09-07">1378504800</enddate>
    <event_data>

    <event_data>
        <id>5</id>
        <startdate realdate="2013-08-25">1377381600</startdate>
        <enddate realdate="2013-09-08">1378591200</enddate>
    </event_data>

    <event_data>
        <id>6</id>
        <startdate realdate="2013-09-15">1379196000</startdate>
        <enddate realdate="2013-09-23">1379887200</enddate>
    <event_data>

    <event_data>
        <id>7</id>
        <startdate realdate="2013-10-26">1382738400</startdate>
            <enddate realdate="2013-11-02">1383346800</enddate>
    </event_data>

    <event_data>
        <id>8</id>
        <startdate realdate="2013-11-10">1384038000</startdate>
        <enddate realdate="2013-11-15">1384470000</enddate>
    <event_data>

    <event_data>
        <id>9</id>
        <startdate realdate="2014-01-11">1389394800</startdate>
        <enddate realdate="2014-01-18">1389999600</enddate>
    </event_data>

    <event_data>
        <id>10</id>
        <startdate realdate="2014-01-19">1390086000</startdate>
        <enddate realdate="2014-01-24">1390518000</enddate>
    <event_data>
</events>

My PHP code is this:

<form action="" method="post">
    <div id="slider-range"></div>
    <input type="text" name="startdate" style="margin:40px 0 0">
    <input type="text" name="enddate" style="margin:40px 0 0">

    <input type="submit" name="submitClub" value="Submit" />
</form>

<?php

?>

<div id="eventList">
<?php 

    $sxe = simplexml_load_file('events.xml');  

    if($sxe) {  
        if(isset($_POST['submitClub'])) {

            $varStart = $_POST['startdate'];
            $varEnd = $_POST['enddate'];

            if($varStart){

                $start = strtotime($varStart);
                $end = strtotime($varEnd);

                $xpath = sprintf(
                    '//event_data[
                    (%1$d >= startdate and %2$d <= enddate)
                or
                (%1$d <= enddate and %2$d >= startdate)
                    ]',
                    strtotime($varStart),
                    strtotime($varEnd)
                );

                foreach($sxe->xpath($xpath) as $event){
                    echo $event->id, PHP_EOL . '<br>';
                }                   
            }               

        } else {
            echo 'Keine Events';
        }
    } else {
        echo '<p>Die Datei konnte nicht geöffnet werden</p>';
    } 
?>
</div>

With this I get all Dates That start and ends during a given date range but I only want to display all events that start during a given date range.

So lets say I want to display all events which start between August 12, 2013 and August 24, 2013, then this events should be displayed:

3
4

If the date range is between September 15, 2013 and November 10, 2013 these events should be displayed

6
7
8

I appreciate any help :)

Edited: It works now. Just change

(%1$d >= startdate and %2$d <= enddate)
or
(%1$d <= enddate and %2$d >= startdate)

to

(%1$d <= startdate and %2$d >= startdate)
  • 写回答

1条回答 默认 最新

  • duaj39673 2013-08-13 16:42
    关注

    I found a solution for my problem above. I just changed

    (%1$d >= startdate and %2$d <= enddate) or (%1$d <= enddate and %2$d
    >= startdate)
    

    to

    (%1$d <= startdate and %2$d >= startdate)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私