Преобразовать текущее время в ближайшие полчаса - PullRequest
4 голосов
/ 01 марта 2012

У меня есть список времени, отображаемый в виде переключателей.Я хотел бы использовать JavaScript для выбора ближайшего к пользователям текущего времени.Я уже использую jquery на моем сайте (если это имеет значение).Также у меня есть другой набор переключателей, которые я бы хотел по умолчанию выбрать +3 часа из «Самое раннее допустимое время».

<label for="select-choice-etime">Earliest acceptable time:</label>
<select name="select-choice-etime" id="select-choice-etime">
    <option value="12:00 AM">12:00 AM</option>
    <option value="12:30 AM">12:30 AM</option>
    <option value="1:00 AM">1:00 AM</option>
    <option value="1:30 AM">1:30 AM</option>
    <option value="2:00 AM">2:00 AM</option>
    <option value="2:30 AM">2:30 AM</option>
    <option value="3:00 AM">3:00 AM</option>
    <option value="3:30 AM">3:30 AM</option>
    <option value="4:00 AM">4:00 AM</option>
    <option value="4:30 AM">4:30 AM</option>
    <option value="5:00 AM">5:00 AM</option>
    <option value="5:30 AM">5:30 AM</option>
    <option value="6:00 AM">6:00 AM</option>
    <option value="6:30 AM">6:30 AM</option>
    <option value="7:00 AM">7:00 AM</option>
    <option value="7:30 AM">7:30 AM</option>
    <option value="8:00 AM">8:00 AM</option>
    <option value="8:30 AM">8:30 AM</option>
    <option value="9:00 AM">9:00 AM</option>
    <option value="9:30 AM">9:30 AM</option>
    <option value="10:00 AM">10:00 AM</option>
    <option value="10:30 AM">10:30 AM</option>
    <option value="11:00 AM">11:00 AM</option>
    <option value="11:30 AM">11:30 AM</option>
    <option value="12:00 PM">12:00 PM</option>
    <option value="12:30 PM">12:30 PM</option>
    <option value="1:00 PM">1:00 PM</option>
    <option value="1:30 PM">1:30 PM</option>
    <option value="2:00 PM">2:00 PM</option>
    <option value="2:30 PM">2:30 PM</option>
    <option value="3:00 PM">3:00 PM</option>
    <option value="3:30 PM">3:30 PM</option>
    <option value="4:00 PM">4:00 PM</option>
    <option value="4:30 PM">4:30 PM</option>
    <option value="5:00 PM">5:00 PM</option>
    <option value="5:30 PM">5:30 PM</option>
    <option value="6:00 PM">6:00 PM</option>
    <option value="6:30 PM">6:30 PM</option>
    <option selected="selected" value="7:00 PM">7:00 PM</option>
    <option value="7:30 PM">7:30 PM</option>
    <option value="8:00 PM">8:00 PM</option>
    <option value="8:30 PM">8:30 PM</option>
    <option value="9:00 PM">9:00 PM</option>
    <option value="9:30 PM">9:30 PM</option>
    <option value="10:00 PM">10:00 PM</option>
    <option value="10:30 PM">10:30 PM</option>
    <option value="11:00 PM">11:00 PM</option>
    <option value="11:30 PM">11:30 PM</option>
</select>

Ответы [ 5 ]

7 голосов
/ 01 марта 2012

Предполагая, что вы хотите округлить минуты до до ближайших 00/30/60, вы можете использовать функцию потолка:

var now = new Date();
now.setMinutes(Math.ceil(now.getMinutes() / 30) * 30);

// Test cases:
// Math.ceil( 0 / 30) * 30 =  0
// Math.ceil( 1 / 30) * 30 = 30
// Math.ceil(30 / 30) * 30 = 30
// Math.ceil(31 / 30) * 30 = 60
// Math.ceil(59 / 30) * 30 = 60
//
// Note that setMinutes(60) increments the hour and sets the minute equal to zero

var h12h = now.getHours();
var m12h = now.getMinutes();
var ampm;
if (h12h >= 0 && h12h < 12) {
    if (h12h === 0) {
        h12h = 12; // 0 becomes 12
    }
    ampm = "AM";
}
else {
    if (h12h > 12) {
        h12h -= 12; // 13-23 becomes 1-11
    }
    ampm = "PM";
}
var timeString = h12h + ":" + ("00" + m12h).slice(-2) + " " + ampm;
$("#select-choice-etime").val(timeString);

Примечание: замените ceil на округление для отображения минут00 ... 14 до 00, 15 ... 44 до 30 и 44 ... 59 до 60.

Демонстрация здесь

6 голосов
/ 01 марта 2012

Вот функция для преобразования текущего времени в ближайшие полчаса в форме, используемой в ваших параметрах (например, ближайшее время типа «10:30 PM»), а затем способ использовать это время для выбора правильной опции.

function getNearestHalfHourTimeString() {
    var now = new Date();
    var hour = now.getHours();
    var minutes = now.getMinutes();
    var ampm = "AM";
    if (minutes < 15) {
        minutes = "00";
    } else if (minutes < 45){
        minutes = "30";
    } else {
        minutes = "00";
        ++hour;
    }
    if (hour > 23) {
        hour = 12;
    } else if (hour > 12) {
        hour = hour - 12;
        ampm = "PM";
    } else if (hour == 12) {
        ampm = "PM";
    } else if (hour == 0) {
        hour = 12;
    }

    return(hour + ":" + minutes + " " + ampm);
}

Вы можете выбрать желаемую опцию следующим образом:

// remove any previous selection
$('#select-choice-etime option').removeAttr('selected');

// select the one that matches the current time
$('#select-choice-etime option[value="' + getNearestHalfHourTimeString() + '"]').attr('selected', 'selected');​

Вы можете увидеть, как она работает здесь: http://jsfiddle.net/jfriend00/Zz7pW/

1 голос
/ 01 марта 2012

Там! Это поможет вам начать:

var time = new Date(),
  hours = time.getHours(),
  minutes = (time.getMinutes().length < 2) ? time.getMinutes() : '0' + time.getMinutes();
ampm = 'AM';

if (hours.match(/[13-23]/)) {
  ampm = 'PM';
}

// You have to convert 13 to 1, 14 to 2 etc.
0 голосов
/ 01 марта 2012

Для начала вы можете проверить этот код.

var now = new Date();
var hour = now.getHours();
var min = now.getMinutes();
var ext = hour > 11 ? 'PM' : 'AM';

var tempRes = $("<select>");
// first we select all PM or AM and append to temp element
$("#select-choice-etime > option[value$='" + ext + "']").appendTo(tempRes);

// and then we select current hour elements within PM or AM
var result = tempRes.find("option[value^='" + hour + "']");

// finally we have two elements in result variable
// for example if hour is 10:12 PM
// result has two items which are 10:00 PM and 10:30 PM
//
// i think you can solve from there
0 голосов
/ 01 марта 2012

Этот основан на времени по Гринвичу tz=GM в строке запроса:

$(document).ready(function() {

    $.getJSON("http://json-time.appspot.com/time.json?tz=GMT&callback=?", function(data) {
        var GMT3 = data.hour; // data.hour+3 (if you want to use GMT+3
        if (data.minute < 15) {
            alert("Current Time is: " + GMT3 + " Selected  is " + GMT3 + ":00");
        }
        else if (data.minute < 45) {
            alert("Current Time is: " + GMT3 + " Selected is" + GMT3 + ":30");
        }
        else {
            alert("Current Time is: " + GMT3 + " Selected is" + GMT3 + 1 + ":00");
        }
    })
});​

Метод getJSON возвращает:

{
  "tz": "GMT", 
  "hour": 8, 
  "datetime": "Thu, 01 Mar 2012 08:12:25 +0000", 
  "second": 25, 
  "error": false, 
  "minute": 12
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...