Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SimpleXML获取日期范围_Php_Xml_Date Range - Fatal编程技术网

PHP SimpleXML获取日期范围

PHP SimpleXML获取日期范围,php,xml,date-range,Php,Xml,Date Range,我无法使用php simpleXML获取日期范围 因此,我的XML结构如下所示: <events> <event_data> <id>1</id> <startdate realdate="2013-08-06">1375740000</startdate> <enddate realdate="2013-08-13">1376344800</

我无法使用php simpleXML获取日期范围

因此,我的XML结构如下所示:

    <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>
<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) {
                foreach($sxe->xpath('//event_data') as $item) {
                    $row = simplexml_load_string($item->asXML()); 

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

                $v = $row->xpath('//startdate[. ="' . $start . '"]'); 
                $z = $row->xpath('//enddate[. ="' . $end . '"]');

                while($v <= $z){
?>
                    <div class="item <?php echo $item->categoryid ?> clearfix">
                        <div class="left">
                            <div class="header_data">
                                <h2><?php echo $item->name ?></h2>
                                <div class="date"><?php 
                                    $startdate = $item->startdate->attributes()->realdate;
                                        $enddate = $item->enddate->attributes()->realdate;
                                        echo date("d.m.Y", strtotime($startdate)) . ' - ' . date("d.m.Y", strtotime($enddate)); 
                                    ?></div>
                                    <div class="club"><?php echo $item->club ?></div>
                                    <div class="theme"><?php echo $item->theme ?></div>
                                </div>
                            </div>

                        </div>
<?php                   $start = $start + 86400;
                        $v = $row->xpath('//startdate[. ="' . $start . '"]');
                    }
                }
            } else {
                echo 'Keine Events';
            }
        }       
    } else {
        echo '<p>Die Datei konnte nicht geöffnet werden</p>';
    } 
?>
</div>

1.
1375740000
1376344800
2.
1376085600
1376690400
3.
1376690400
1377295200
4.
1377295200
1378504800
5.
1377381600
1378591200
6.
1379196000
1379887200
7.
1382738400
1383346800
8.
1384038000
1384470000
9
1389394800
1389999600
10
1390086000
1390518000
还有更多类似的条目,有不同的开始和结束日期

我的php脚本如下所示:

    <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>
<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) {
                foreach($sxe->xpath('//event_data') as $item) {
                    $row = simplexml_load_string($item->asXML()); 

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

                $v = $row->xpath('//startdate[. ="' . $start . '"]'); 
                $z = $row->xpath('//enddate[. ="' . $end . '"]');

                while($v <= $z){
?>
                    <div class="item <?php echo $item->categoryid ?> clearfix">
                        <div class="left">
                            <div class="header_data">
                                <h2><?php echo $item->name ?></h2>
                                <div class="date"><?php 
                                    $startdate = $item->startdate->attributes()->realdate;
                                        $enddate = $item->enddate->attributes()->realdate;
                                        echo date("d.m.Y", strtotime($startdate)) . ' - ' . date("d.m.Y", strtotime($enddate)); 
                                    ?></div>
                                    <div class="club"><?php echo $item->club ?></div>
                                    <div class="theme"><?php echo $item->theme ?></div>
                                </div>
                            </div>

                        </div>
<?php                   $start = $start + 86400;
                        $v = $row->xpath('//startdate[. ="' . $start . '"]');
                    }
                }
            } else {
                echo 'Keine Events';
            }
        }       
    } else {
        echo '<p>Die Datei konnte nicht geöffnet werden</p>';
    } 
?>
</div>


正确使用XPath有点棘手,但这应该可以做到:

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

$xpath = sprintf(
    '/events/event_data[
        (%1$d >= startdate and %2$d <= enddate)
        or
        (%1$d <= enddate and %2$d >= startdate)
    ]',
    strtotime('December 24, 2013'),
    strtotime('July 15, 2014')
);

var_dump($events->xpath($xpath));
$events=simplexml_load_文件('events.xml');
$xpath=sprintf(
'/events/event_数据[

(%1$d>=startdate和%2$d感谢Gordon的帮助,我非常感谢您的帮助:)我还有一个问题。如果我想显示在给定日期范围内开始的所有事件,那么我必须做什么?我已经尝试使用while循环使其工作,但没有成功。@kathi只是查询链接/startdate位于用户提供的开始日期和结束日期之间的任何事件数据。如果这对您不起作用,请继续我想为它提出一个新问题。