Вычтите минуты из выбранного значения - PullRequest
0 голосов
/ 21 мая 2018

Как можно вычесть минуты из значения времени?Допустим, пользователь выбирает 12: 20 am , и результат будет равен 11: 10 pm , потому что он автоматически вычтет 70 минут.Я начинаю это делать, но не знаю, как продолжить.

<select id="selectHour">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
</select>

<select id="selectMinute">
    <option value="00">00</option>
    <option value="5">5</option>
    <option value="10">10</option>
    <option value="15">15</option>
    <option value="20">20</option>
    <option value="25">25</option>
    <option value="30">30</option>
    <option value="35">35</option>
    <option value="40">40</option>
    <option value="45">45</option>
    <option value="50">50</option>
    <option value="55">55</option>
</select>

<select id="selectAMPM">
    <option value="am">am</option>
    <option value="pm">pm</option>
</select>

<button onclick="myFunction()">Get Result</button>
<p id="result"></p> 

    function myFunction() {
        var hour = document.getElementById("selectHour").value; 
        var minute = document.getElementById("selectMinute").value; 
        var ampm = document.getElementById("selectAMPM").value; 
        document.getElementById("result").innerHTML = hour + ":" + minute + " " + ampm; 
    }

</script>

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Этот код позволит логике DateTime javascript сделать математику за вас.Он учитывает тот факт, что JS не любит времена, но DateTimes, и просто скрывает часть даты.Он принимает текущую дату и время, заменяет часть времени на то, что вы выбрали в раскрывающихся списках, использует некоторые стандартные функции даты и времени JS для получения правильных результатов и отображает результат в 12-часовом формате.Я не потратил время на обработку ошибок (например, не нужно вводить значения в течение нескольких минут, чтобы вычесть).Ты там сам по себе ...

<html>
   <body>
        <select id="selectHour">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
        </select>

        <select id="selectMinute">
        <option value="00">00</option>
        <option value="5">5</option>
        <option value="10">10</option>
        <option value="15">15</option>
        <option value="20">20</option>
        <option value="25">25</option>
        <option value="30">30</option>
        <option value="35">35</option>
        <option value="40">40</option>
        <option value="45">45</option>
        <option value="50">50</option>
        <option value="55">55</option>
        </select>

        <select id="selectAMPM">
        <option value="am" selected>am</option>
        <option value="pm">pm</option>
        </select>

    <p>
    <input id="valueToSubtract"/>&nbsp;Minutes to subtract<br/>
    <button onclick="myFunction()">Get Result</button>
    <p id="result"></p> 


    <script>
       function myFunction() {
            // Grab values from the UI
            //
            var hour = document.getElementById("selectHour").value; 
            var minute = document.getElementById("selectMinute").value;
            var ampm = document.getElementById("selectAMPM").value; 

            // Look for times AFTER 12 noon [1pm...11:59pm]
            //
            if ((ampm == "pm") && (hour != 12))
            {
              hour = (hour * 1) + 12;
            }

            // Special case:  look for 12 midnight
            // 
            if ((ampm == "am") && (hour == 12))
            {
              hour = 24;
            }



            // Javascript doesn't like times, it likes DateTimes.  Get the current date and time...
            //
            var fakeDateTime = new Date();

            // ... now plug the UI-selected times in place of the current time
            fakeDateTime.setHours(hour, minute, 0);

            // Finally, subtract the value in minutes, letting JS handle rolling over hour boundaries and such
            //
            fakeDateTime.setMinutes(fakeDateTime.getMinutes() - document.getElementById("valueToSubtract").value);



            document.getElementById("result").innerHTML = fakeDateTime.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })
        }

        </script>
    </body>
</html>
0 голосов
/ 21 мая 2018

Примечание: Для обоих примеров я предполагаю вычитание 70 минут (как указано в вашем примере), но код можно редактировать для другой суммы.

Если вы можете использоватьСторонняя библиотека, такая как moment.js , становится очень тривиальной:

myFunction = function() {
    var hour = document.getElementById("selectHour").value; 
    var minute = document.getElementById("selectMinute").value; 
    var ampm = document.getElementById("selectAMPM").value;
    var time = hour + ":" + minute + " " + ampm;
    var m = new moment(time, 'h:m a');

    document.getElementById("result").innerHTML = m.subtract(70, 'minutes').format('h:m a'); 
}

Пример можно посмотреть здесь: jsFiddle

Ifmoment.js не вариант, тогда вы могли бы использовать что-то вроде следующего в качестве отправной точки.

Примечание: Javascript не делает мод с отрицательными значениями, как я ожидал, поэтому я создал свойсобственные ответы, основанные на ответе: SO Post

mod = function(a, b) {
    return ((a%b)+b)%b;
}

myFunction = function() {
    // convert hour and minute to integer values
    var hour = parseInt(document.getElementById("selectHour").value); 
    var minute = parseInt(document.getElementById("selectMinute").value); 
    var ampm = document.getElementById("selectAMPM").value;

    // convert to 24 hour time
    if (ampm === "pm" && hour > 12) hour += 12;
    if (ampm === "am" && hour === 12) hour = 0; 

    // Get the time and minutes you want to subtract in hours
    var timeInHours = hour + (minute / 60);
    var timeToSubtractInHours  = 70 / 60;

    // Get the difference in time
    var timeDiff = (timeInHours - timeToSubtractInHours);

    // Get the mod to make sure it's between 0-23
    var modDiff = mod(timeDiff,24);

    // Pull out the hours and minutes
    var h = modDiff | 0
    var min = (modDiff % 1) * 60 | 0;

    // Print the time
    document.getElementById("result").innerHTML = h + ":" + min;
}

Пример не конвертируется обратно в 12-часовое время (с am и pm), но я подумал, что это было достаточно просто, чтобыпропустить.Там могут быть более простые и быстрые способы сделать это, но это то, что впервые пришло ко мне.Измените, как считаете нужным.

См. Пример для этого здесь: jsFiddle

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