3
我有問題可以通過php simpleXML獲取日期範圍。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>
和更多的條目類似,不同的開始日期和結束日期。
我的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) {
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>
因此,如果用戶在滑塊範圍選擇的開始日期爲2013年8月10日,併爲結束日期2013年9月12日的follwing事件應顯示:
<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>
開始和結束日期是動態的,不是靜態的,所以用戶也可以選擇其他的開始和結束日期。
因此,如果用戶選擇2013年12月24日和2014年7月15日之間的日期範圍內的evenets應顯示:
<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>
我希望這clarifys我需要什麼。
也許有人可以幫助或給我一個提示。
戈登感謝您的幫助,我真的很感謝你的努力來幫助我:) – kathi
我有一個問題。如果我想顯示在給定日期範圍內開始的所有事件,那麼我該怎麼做? 我已經試圖使它與while循環一起工作,但那並不成功。 – kathi
@kathi只是查詢任何event_data,其中link/startdate位於用戶提供的開始日期和結束日期之間。如果這不適合你,請考慮爲它創建一個新問題。 – Gordon