8 Stimmen

Aktuelle Zeit auf die nächste halbe Stunde umrechnen

Ich habe eine Liste von Zeiten, die als Optionsfelder angezeigt werden. Ich möchte JavaScript verwenden, um diejenige auszuwählen, die der aktuellen Zeit des Benutzers am nächsten kommt. Ich bin bereits mit Jquery auf meiner Website (wenn das zählt). Außerdem habe ich eine weitere Reihe von Optionsfeldern, die ich standardmäßig auf +3 Stunden von der "Frühesten akzeptablen Zeit" auswählen möchte.

<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>

10voto

Salman A Punkte 246207

Angenommen, Sie möchten die Minuten runden auf auf 00/30/60 auf- oder abzurunden, können Sie die Obergrenzenfunktion verwenden:

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);

Hinweis: Ersetzen Sie ceil durch round to map minutes 00...14 to 00, 15...44 to 30 und 44...59 to 60.

Demo hier

8voto

jfriend00 Punkte 632952

Hier finden Sie eine Funktion, mit der Sie die aktuelle Uhrzeit in die nächste halbe Stunde umrechnen können, wie sie in Ihren Optionen verwendet wird (z. B. "10:30 PM"), und mit der Sie dann die richtige Option auswählen können.

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);
}

Damit können Sie die gewünschte Option auswählen:

// 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');

Hier können Sie sehen, wie es funktioniert: http://jsfiddle.net/jfriend00/Zz7pW/

1voto

elclanrs Punkte 90473

So! So können Sie anfangen:

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.

0voto

robasta Punkte 4557

Diese basiert auf der GMT-Zeit tz=GM in der Abfragezeichenfolge:

$(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");
        }
    })
});

Die Methode getJSON gibt zurück:

{
  "tz": "GMT", 
  "hour": 8, 
  "datetime": "Thu, 01 Mar 2012 08:12:25 +0000", 
  "second": 25, 
  "error": false, 
  "minute": 12
}

0voto

arunes Punkte 3404

Für den Anfang können Sie diesen Code prüfen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X