Сравнение даты / времени - PHP, XML, strtotime - PullRequest
1 голос
/ 25 августа 2011

Сообщество переполнения стека,

Я всегда ценил вашу мудрость и помощь. Вот моя ситуация:

Вот фрагмент моего файла XML (это очень маленькая его часть):

    <matchup id="1" date="09/08/11" time="7:30 PM">
        <away city="New Orleans">Saints</away>
        <home city="Green Bay">Packers</home>
        <finalscore>
            <away></away>
            <home></home>
        </finalscore>
    </matchup>

Хорошо, поэтому с помощью SimpleXML я получаю эти данные XML и сохраняю их в соответствующие переменные PHP. Единственная вещь, в которой я действительно нуждаюсь, это раздел о дате / времени.

Я хочу сравнить дату / время матча с текущим временем. Если время матча уже прошло (или началось в этом отношении), я хочу отобразить другой вывод.

Так вот мой PHP, но что-то здесь не работает правильно:

foreach($week->matchup as $matchup)
{
$game_time = $matchup['time'];
$game_date = $matchup['date'];

date_default_timezone_set('US/Eastern');
$game_date2 = strtotime($game_date);
$game_date3 = date('m/d/y', $game_date2);
$time_stamp = strtotime($game_time);
$check = date("g:i A", $time_stamp);
$date_now = date('m/d/y');
$time_now = date('g:i A');

if ($game_date3 >= $date_now && $check >= $time_now) {

?>
<tr>
<td class="two"><?php echo $game_date ?></td>
<td class="two">
<input type="radio" id="<?php echo $away_city ?> <?php echo $away_teamname ?>" class="radio" name="<?php echo $week_name ?>" value="<?php echo $away_city ?> <?php echo $away_teamname ?>"></input>
    <?php echo $away_full ?>
</td>
<td class="two">
<input type="radio" id="<?php echo $home_city ?> <?php echo $home_teamname ?>" class="radio" name="<?php echo $week_name ?>" value="<?php echo $home_city ?> <?php echo $home_teamname ?>"></input>
    <?php echo $home_full ?>
</td>
<td class="two"><?php echo $game_time ?></td>
</tr>
<?php
} else {
?>
<tr>
<td class="two"><?php echo $game_date ?></td>
<td class="two">
<span><?php echo $away_full ?></span>
</td>
<td class="two">
<span><?php echo $home_full ?></span>
</td>
<td class="two"><?php echo $game_time ?></td>
</tr>
<?php
}
    } ?>

Как вы можете видеть здесь, я просто пытаюсь проверить, прошла ли дата / время из XML за временем текущего времени. Если это так, я хочу отобразить вывод БЕЗ входных радиокнопок. Если текущее время не прошло, я хочу отобразить вывод с переключателями ввода.

Я думаю, что проблема где-то в настройке моей переменной с strtotime и получении XML-даты / времени для правильного анализа по времени сервера.

Я надеюсь, что кто-то может помочь мне понять это! Кроме того, любые рекомендации, чтобы сделать это более кратким и безопасным, также приветствуются.

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Нельзя сравнивать строки даты.Вам необходимо преобразовать их в метки времени, используя strtotime , затем и сравните их.

Вот так:

$date = '09/08/11 7:30 PM';

if (strtotime($date) < time()) {
    // $date is in the past
}

Итак, в вашем случае:

$game_time = $matchup['time'];
$game_date = $matchup['date'];
$date = "{$game_date} {$game_time}";

if (strtotime($date) < time()) {
    // $date is in the past
}
0 голосов
/ 25 августа 2011

Я бы предостерег от использования более старых функций даты и предложил бы вам использовать класс DateTime. Для вышесказанного вы должны смотреть на DateTime::createFromFormat();

Итак, вы бы получили что-то вроде этого:

$game_date2 = DateTime::createFromFormat('d/m/Y H:i:s', $game_date);
$game_date3 = new DateTime();

if($game_date2 > $game_date3) {
    echo 'game yet to be played';
}

Обратите внимание, что вам нужен как минимум PHP5.2.2, чтобы иметь возможность сравнивать объекты даты, как в моем коде выше. См. DateTime :: diff () страницу для получения дополнительной информации.

...