0

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)
kathi
  • 74
  • 1
  • 8
  • @Passerby sorry my mistake. i meant 3 and i edited my text. – kathi Aug 13 '13 at 10:42
  • Since no one provided that solution yet, it's okay to provide your solution as an answer and accept it. As an alternative you can delete the question if you don't think it offers any value for future visitors. – Gordon Aug 13 '13 at 12:47

1 Answers1

1

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)
kathi
  • 74
  • 1
  • 8