2014-10-27 3 views
0

Я хотел бы узнать, можно ли вычесть строку 24-часового времени?Вычитание строки времени 24 часа

<?php 
    if($_POST[startTime] - $_POST[endTime] == 0) 
     echo 'PLEASE ADJUST YOUR START TIME OR END TIME'; 

?> 

<div class="form-group"> 
    <label class="col-lg-3 control-label" for="inputBday">End Time </label> 
    <div class="col-lg-9"> 
     <select class="form-control" id="endTime" required> 
      <option value="">Select End Time</option> 
      <option value="00:00">12 MN</option> 
      <option value="01:00">1:00 AM</option> 
      <option value="02:00">2:00 AM</option> 
      <!-- and so on .... --> 
      <option value="11:00">11:00 AM</option> 
      <option value="12:00">12:00 NN</option> 
      <option value="13:00">1:00 PM</option> 
      <option value="14:00">2:00 PM</option> 
      <!-- and so on ... --> 
      <option value="22:00">10:00 PM</option> 
      <option value="23:00">11:00 PM</option> 
     </select> 
    </div> 
</div>   

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

Кроме того, я попытался изменить каждое значение параметра на обычные цифры, например, с «01:00» до «1», он возвращает мне Parse error: syntax error, unexpected 'die'. (Я использую die в отладке, например, распечатывая значение с помощью die). Я даже попытался удалить кавычки, чтобы, я думаю, он будет преобразован в int. Возвращает мне ту же ошибку.

ответ

1

Если вам не нужно иметь дело с частичными часами, например. 03:45 и ТОЛЬКО полный рабочий день, то почему бы не обновить форму, чтобы просто отправить значение часов?

<option value="0"> 12:00am 
<option value="1"> 1:00am 
... 
<option value="15"> 3pm 
... 

Тогда вычитание становится тривиальным.

+0

тот же, он возвращает мне это: Не удалось выполнить запрос: SQLSTATE [23000]: нарушение ограничения целостности: 1048 Le champ 'startTime' ne peut être vide (null) :( –

+0

, поскольку вы вообще не упоминали базы данных в своем вопросе , нет ничего удивительного. –

+0

моя база данных в порядке, я думаю, потому что она не возвращает то же самое, когда поля времени начала и окончания времени были просто текстовым (не выпадающим списком). Вопрос: нет ли ошибок/предупреждения в моем коде выше для выпадающего списка? –

1

Вы должны преобразовать строку времени с помощью strtotime - и затем вычислить разницу между двумя:

$startTime = strtotime($_POST['startTime']); 
$endTime = strtotime($_POST['endTime']); 
if($endTime - $startTime <= 0) { 
    // end time selected is before or the same as start time 
} 

Разница вы получаете будет в считанные секунды.

И, естественно, вам необходимо добавить проверку ошибок. Что делать, если вы получаете abcd и xyz в качестве начальных и конечных строк времени?

+0

ok wait. во-первых: какая разница между $ _POST [startTime] и $ _POST ['startTime'] ??? Я не включаю одинарные кавычки ВСЕГДА и im 99% в моем проекте. Скажите, нормально ли не включать одинарные кавычки? –

+0

@GlennVon Одиночные или двойные кавычки - не имеет значения - но вы должны их включить. Без котировок вы увидите предупреждения (если вы включите отображение ошибок) об неизвестных константах. Тот факт, что он может работать для вас сейчас, не имеет значения. –

+0

он работает для меня (не помещая одиночные кавычки), поэтому я не буду против этого сейчас. В любом случае, я делаю это правильно? мои коды выглядят так: будет конвертировано во времени? или я должен использовать

Смежные вопросы