Выбор количества часов между временем начала и временем окончания вызывает предупреждение независимо от выбора

#javascript #jquery #asp.net

#javascript #jquery #asp.net

Вопрос:

Наше приложение имеет временные диапазоны, время начала и время окончания.

Пользователи должны выбрать минимум 4 часа, прежде чем им будет разрешено продолжить обработку своих запросов.

Пока не имеет значения, какой временной диапазон выбирает пользователь, возникает предупреждение.

Например, если пользователь выбирает время начала 07:00:00 и время окончания 12:00:00, предупреждение не должно возникать, и пользователь должен продолжить выполнение остальной части запроса.

Есть идеи, что нужно изменить с помощью кода ниже?

Заранее большое спасибо

 <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/base/jquery-ui.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="css/datePicker.css" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js" type="text/javascript"></script>
    <script src="//code.jquery.com/jquery-1.10.2.js" type="text/javascript"></script>
    <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js" type="text/javascript"></script> 


  <script type='text/javascript'>//<![CDATA[
       $(window).load(function () {
           //Attach click event to button
           $('#Button1').on('click', function () {
               //Get Values from dropdownlist
               var sHour = $('#startHour').val(),
                eHour = $('#endHour').val();

               //create date format from dropdownlist selected values 
               var theDate = $('#<%= txtDate.ClientID%>').val();
               var timeStart = new Date(theDate   sHour).getHours();
               var timeEnd = new Date(theDate   eHour).getHours();

               //Calulate the time difference
               var hourDiff = timeEnd - timeStart;

               //Check if hour difference is less than 4 hours and show the message accordingly
               if (hourDiff < 4) {
                   alert("A mininum of 4 hours is required!");
               }
           });
       });//]]>  

</script>
                       <td align="right">
                        <span id="lblDate">Date</span>
                       </td>
                       <td align="left">
                        <asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
                        <br />
                       </td>
                       <td align="right">
                        <span id="lblStarTime">Start Time</span>
                       </td>
                       <td align="left">
                       <asp:DropDownList id="startHour" runat="server">
                        <asp:ListItem Value="07:00:00">07</asp:ListItem>
                        <asp:ListItem Value="08:00:00">08</asp:ListItem>
                        <asp:ListItem Value="09:00:00">09</asp:ListItem>
                        <asp:ListItem Value="10:00:00">10</asp:ListItem>
                        <asp:ListItem Value="11:00:00">11</asp:ListItem>
                        <asp:ListItem Selected="True" Value="00:00:00">12</asp:ListItem>
                        <asp:ListItem Value="01:00:00">01</asp:ListItem>
                        <asp:ListItem Value="02:00:00">02</asp:ListItem>
                        <asp:ListItem Value="03:00:00">03</asp:ListItem>
                        <asp:ListItem Value="04:00:00">04</asp:ListItem>
                        <asp:ListItem Value="05:00:00">05</asp:ListItem>
                        <asp:ListItem Value="06:00:00">06</asp:ListItem>
                       </asp:DropDownList>

                        <asp:DropDownList id="startMinutes" runat="server">
                 <asp:ListItem Value="00">00</asp:ListItem>
                         <asp:ListItem Value="15">15</asp:ListItem>
                         <asp:ListItem Value="30">30</asp:ListItem>
                         <asp:ListItem Value="45">45</asp:ListItem>
                    </asp:DropDownList>

                       <asp:DropDownList id="startAmPm" runat="server">
                 <asp:ListItem Value="AM">AM</asp:ListItem>
                 <asp:ListItem Value="PM">PM</asp:ListItem>
                       </asp:DropDownList>
                      </td>
                     </tr>
                     <tr>
                      <td align="right">
                       <span id="lbEndTime">End Time</span>
                      </td>
                      <td align="left">
                       <asp:DropDownList id="endHour" runat="server">
                        <asp:ListItem Value="07:00:00">07</asp:ListItem>
                        <asp:ListItem Value="08:00:00">08</asp:ListItem>
                        <asp:ListItem Value="09:00:00">09</asp:ListItem>
                        <asp:ListItem Value="10:00:00">10</asp:ListItem>
                        <asp:ListItem Value="11:00:00">11</asp:ListItem>
                        <asp:ListItem Selected="True" Value="00:00:00">12</asp:ListItem>
                        <asp:ListItem Value="01:00:00">01</asp:ListItem>
                        <asp:ListItem Value="02:00:00">02</asp:ListItem>
                        <asp:ListItem Value="03:00:00">03</asp:ListItem>
                        <asp:ListItem Value="04:00:00">04</asp:ListItem>
                        <asp:ListItem Value="05:00:00">05</asp:ListItem>
                        <asp:ListItem Value="06:00:00">06</asp:ListItem>
                       </asp:DropDownList>

                       <asp:DropDownList id="endMinutes" runat="server">
                 <asp:ListItem Value="00">00</asp:ListItem>
                         <asp:ListItem Value="15">15</asp:ListItem>
                         <asp:ListItem Value="30">30</asp:ListItem>
                         <asp:ListItem Value="45">45</asp:ListItem>
                    </asp:DropDownList>

                       <asp:DropDownList id="endAmPm" runat="server">
                 <asp:ListItem Value="AM">AM</asp:ListItem>
                 <asp:ListItem Value="PM">PM</asp:ListItem>
                       </asp:DropDownList>
                      </td>
                     </tr>
                    </div>
                   </table>

                    <asp:Button ID="Button1" runat="server" Text="Button" />
  

Комментарии:

1. Какую версию jQuery вы используете?

2. Я не вижу, чтобы вы добавляли AM / PM к строке, которую вы передаете конструктору Date().

3. Как вы ожидаете theDate sHour выглядеть?

4. я предлагаю проверять разницу во времени на стороне сервера, а не с помощью javascript. люди могут просто открыть консоль разработки и обойти вашу проверку

5. @JustinRusso, Eugine, Banana, Pointy, спасибо вам, ребята, за быстрый ответ. Я обновил свой пост версиями jQuery, которые я использую. Евгений, я не думал, что мне нужно добавлять AM / PM. Это было сделано для того, чтобы пользователь мог выбрать время утра или вечера. Заостренный, мы ожидаем что-то вроде 07/01/2014 07:00:00 до 07/01/2014 11:00:00 или что-то в этом роде. Это ежедневное событие.

Ответ №1:

Ваша проблема в том, как вы создаете свои Date переменные. Вам нужен пробел между вашей датой и вашим временем.

Обновить:

Как упоминал Мэтью из Critical Cognition и некоторые другие, вы захотите добавить значения AM / PM. Таким образом, что-то вроде 2:00 вечера дает значение часа 14, а не 2.

 var sAmPm = $('#startAmPm').val();
var eAmPm = $('#endAmPm').val();
var timeStart = new Date(theDate   ' '   sHour   ' '   sAmPm).getHours();
var timeEnd = new Date(theDate   ' '   eHour   ' '   eAmPm).getHours();
  

Комментарии:

1. ВАУ, @BubbleHearth, ты абсолютно прав! Это исправлено. Большое спасибо и благодарность всем вам, кто ответил.

2. Это создаст действительный объект Date, но он не будет правильно вычислять разницу между 2 временами. Вам нужно добавить AM / PM, чтобы получить 24-часовые часы.

Ответ №2:

Я воссоздал все это в JSFiddle, и это работает так, как ожидалось. Могу ли я предложить вам использовать мой метод для получения текущей даты? Я думаю, что проблема была в пробелах, которые я добавил к конкатенациям дат. Как упоминалось в другом ответе «BubbleHeart».

http://jsfiddle.net/c5r28/

        //Attach click event to button
       $('#Button1').on('click', function () {
           var currentDate = new Date();
           //Get Values from dropdownlist
           var sHour = $('#startHour').val(),
            eHour = $('#endHour').val();

           //create date format from dropdownlist selected values 
           var theDate = (currentDate.getMonth()   1)   '/'   currentDate.getDate()   '/'   currentDate.getFullYear();
           var timeStart = new Date(theDate   ' '   sHour).getHours();
           var timeEnd = new Date(theDate    ' '   eHour).getHours();

           //Calulate the time difference
           var hourDiff = timeEnd - timeStart;

           //Check if hour difference is less than 4 hours and show the message accordingly
           if (hourDiff < 4) {
               alert("A mininum of 4 hours is required!");
           }
       });
  

Комментарии:

1. Спасибо. BubbleHeart был немного быстрее, и да, что вы сделали по-другому, так это добавили пробелы между датой и часами. Большое спасибо.

Ответ №3:

Пара вещей. Во-первых, добавьте пробел при создании вашего объекта Date. Во-вторых, вам нужно учитывать время утра и вечера. В-третьих, извлекайте только часы из часового поля, а не полный час: минута: секунды. Рабочий код:

    <script type='text/javascript'>//<![CDATA[
       $(window).load(function () {
           //Attach click event to button
           $('#Button1').on('click', function () {
               //Get Values from dropdownlist
               var sHour = $('#startHour').val();
               var sMinutes = $('#startMinutes').val();
               var sAmPm = $('#startAmPm').val();

               var eHour = $('#endHour').val();
               var eMinutes = $('#endMinutes').val();
               var eAmPm = $('#endAmPm').val();

               //create date format from dropdownlist selected values 
               var theDate = $('#<%= txtDate.ClientID%>').val();
           var timeStart = new Date(theDate   ' '   sHour   ':'   sMinutes   ' '   sAmPm).getHours();
           var timeEnd = new Date(theDate   ' '   eHour   ':'   eMinutes   ' '   eAmPm).getHours();

           //Calulate the time difference
           var hourDiff = timeEnd - timeStart;

           //Check if hour difference is less than 4 hours and show the message accordingly
           if (hourDiff < 4) {
               alert("A mininum of 4 hours is required!");
           }
       });
   });//]]>  

</script>
                   <td align="right">
                    <span id="lblDate">Date</span>
                   </td>
                   <td align="left">
                    <asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
                    <br />
                   </td>
                   <td align="right">
                    <span id="lblStarTime">Start Time</span>
                   </td>
                   <td align="left">
                   <asp:DropDownList id="startHour" runat="server">
                    <asp:ListItem Value="07">07</asp:ListItem>
                    <asp:ListItem Value="08">08</asp:ListItem>
                    <asp:ListItem Value="09">09</asp:ListItem>
                    <asp:ListItem Value="10">10</asp:ListItem>
                    <asp:ListItem Value="11">11</asp:ListItem>
                    <asp:ListItem Selected="True" Value="12">12</asp:ListItem>
                    <asp:ListItem Value="01">01</asp:ListItem>
                    <asp:ListItem Value="02">02</asp:ListItem>
                    <asp:ListItem Value="03">03</asp:ListItem>
                    <asp:ListItem Value="04">04</asp:ListItem>
                    <asp:ListItem Value="05">05</asp:ListItem>
                    <asp:ListItem Value="06">06</asp:ListItem>
                   </asp:DropDownList>

                    <asp:DropDownList id="startMinutes" runat="server">
             <asp:ListItem Value="00">00</asp:ListItem>
                     <asp:ListItem Value="15">15</asp:ListItem>
                     <asp:ListItem Value="30">30</asp:ListItem>
                     <asp:ListItem Value="45">45</asp:ListItem>
                </asp:DropDownList>

                   <asp:DropDownList id="startAmPm" runat="server">
             <asp:ListItem Value="AM">AM</asp:ListItem>
             <asp:ListItem Value="PM">PM</asp:ListItem>
                   </asp:DropDownList>
                  </td>
                 </tr>
                 <tr>
                  <td align="right">
                   <span id="lbEndTime">End Time</span>
                  </td>
                  <td align="left">
                   <asp:DropDownList id="endHour" runat="server">
                    <asp:ListItem Value="07">07</asp:ListItem>
                    <asp:ListItem Value="08">08</asp:ListItem>
                    <asp:ListItem Value="09">09</asp:ListItem>
                    <asp:ListItem Value="10">10</asp:ListItem>
                    <asp:ListItem Value="11">11</asp:ListItem>
                    <asp:ListItem Selected="True" Value="12">12</asp:ListItem>
                    <asp:ListItem Value="01">01</asp:ListItem>
                    <asp:ListItem Value="02">02</asp:ListItem>
                    <asp:ListItem Value="03">03</asp:ListItem>
                    <asp:ListItem Value="04">04</asp:ListItem>
                    <asp:ListItem Value="05">05</asp:ListItem>
                    <asp:ListItem Value="06">06</asp:ListItem>
                   </asp:DropDownList>

                   <asp:DropDownList id="endMinutes" runat="server">
             <asp:ListItem Value="00">00</asp:ListItem>
                     <asp:ListItem Value="15">15</asp:ListItem>
                     <asp:ListItem Value="30">30</asp:ListItem>
                     <asp:ListItem Value="45">45</asp:ListItem>
                </asp:DropDownList>

                   <asp:DropDownList id="endAmPm" runat="server">
             <asp:ListItem Value="AM">AM</asp:ListItem>
             <asp:ListItem Value="PM">PM</asp:ListItem>
                   </asp:DropDownList>
                  </td>
                 </tr>
                </div>
               </table>

                <asp:Button ID="Button1" runat="server" Text="Button" />
  

Комментарии:

1. это хороший вариант. Большое вам спасибо. Я могу убедиться, что это работает действительно хорошо.