我在从给定日期范围之间的开始日期的 XML 文件中获取所有事件时遇到问题。
我的 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>
我的 PHP 代码是这样的:
<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>
有了这个,我得到了在给定日期范围内开始和结束的所有日期,但我只想显示在给定日期范围内开始的所有事件。
所以假设我想显示从 2013 年 8 月 12 日到 2013 年 8 月 24 日之间开始的所有事件,那么应该显示这些事件:
3
4
如果日期范围在 2013 年 9 月 15 日和 2013 年 11 月 10 日之间,则应显示这些事件
6
7
8
我很感激任何帮助:)
编辑: 它现在工作。只是改变
(%1$d >= startdate and %2$d <= enddate)
or
(%1$d <= enddate and %2$d >= startdate)
至
(%1$d <= startdate and %2$d >= startdate)