2012-03-22 15 views
5

Mam Javascript obiekt Date równy 00:30, a kiedy robi:Dodawanie 30 minut do chwili obecnej powoduje wrócić 30 minut

date.setMinutes(date.getMinutes() + 30); 

powoduje obiektu data do równego 00:00.

Czy ktoś wie, dlaczego tak się dzieje?

Oto gdzie jest używany kod:

for (var i = openTime; i <= closeTime; i.setMinutes(i.getMinutes() + timeIncrement)) { 
    var time = i.getHours() + (i.getHours() == 0 ? '0' : '') + ':' + i.getMinutes() + (i.getMinutes() == 3 || i.getMinutes() == 0 ? '0' : ''); 

    $(timeClientId).append($('<option />').val(time).text(time)); 
} 

Powyższy skrypt tworzy listę dostępnych czasów od 10:00 aż do 02:00 następnego dnia.

Działa poprawnie, dopóki nie osiągnie północy 00:00 po wielu udanych iteracjach.

Czy ktoś może pomóc?

Dzięki!

ODPOWIEDŹ/ROZWIĄZANIE:

Ten problem był spowodowany letni problemu, więc w sobotę zegary iść do przodu. Z jakiegoś dziwnego powodu, dodając 30 minut do 12:30, resetuje się z powrotem do godziny 12:00 za pomocą .setMinutes(). To utrzymywało go w nieskończonej pętli. Rozwiązaniem było dodanie minut przy użyciu i.setTime (i.getTime() + timeIncrement * 60 * 1000). To rozwiązało problem.

Pozdrawiam za wszystkie odpowiedzi!

Odpowiedz

5

Ustawiane są tylko minuty. Oczywiście 30 minut + 30 minut na zegarze wynosi 60 minut, czyli 0 minut.

Funkcja ta sprytna metoda (jest mądry, ponieważ współpracuje ze wszystkimi najazdów!):

function addMinutes(inDate, inMinutes) 
{ 
    var newdate = new Date(); 
    newdate.setTime(inDate.getTime() + inMinutes * 60000); 
    return newdate; 
} 

var date = new Date(); 

alert(addMinutes(date,-30));​ 
+0

Dzięki za odpowiedź. W jaki sposób zwiększysz czas o 30 minut? – Base33

+0

Dodano próbkę. – Karlth

+0

Dzięki. To też jest poprawne. – Base33

0

date.js ma dobry sposób, aby to zrobić:

new Date().add({ minutes: 30 }); 

lub nawet więcej płynu:

new Date().add(30).minutes(); 
3

W jaki sposób inicjujesz swoją datę? setMinutes wydaje się działać zgodnie z oczekiwaniami, więc być może wystąpił błąd w początkowej wartości. Zobacz poniżej mój szybki i brudny test.

var date = new Date(0); 
document.write(date); 
document.write("<br>"); 
date.setMinutes(30); 
document.write(date); 
document.write("<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date); 
document.write("<br>"); 

Wyjścia:

Thu Jan 1 00:00:00 UTC 1970 
Thu Jan 1 00:30:00 UTC 1970 
Thu Jan 1 01:00:00 UTC 1970 
+0

To jest poprawne. Nie wiedziałem, że ta data zrobiła automatyczną rollover. – Karlth

0

Spróbuj tego:

var date = new Date(2013,2,31,1,59); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes()+30); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date,"<br>"); 

Sun Mar 31 2013 01:59:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:29:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:59:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:29:00 GMT+0100 (CET) 

Tak oczywiście przejście na czas letni w Niemczech jest przyczyną tego wyniku. Ale czy było to zamierzone? Wprowadzając 2013,2,31,2,59 daje ten sam wynik, jakby godzina 1-2 nie istniała. to nie wygląda mi dobrze.