javascript - date.setHours() nu funcționează


Încerc să scad ore dintr-un șir de dată și oră dat folosind JavaScript. Codul meu este așa:

     var cbTime = new Date();    
     cbTime = selectedTime.setHours(-5.5);

Unde selectedTime este timpul dat (timpul pe care îl trec ca parametru).

Deci să presupunem că selectedTime este Tue Sep 16 19:15:16 UTC+0530 2014 și răspunsul pe care îl obțin este: 1410875116995

Vreau un răspuns în format datetime. Fac ceva greșit aici? Sau există vreo altă soluție?

Răspuns #1

Motivul este că setHours(), setMinutes() etc., iau un Integer ca parametru. Din documentație:

...

Metoda setMinutes() setează minutele pentru o dată specificată conform orei locale.

...

Parametri:

Un număr întreg între 0 și 59, reprezentând minutele.

Așadar, ai putea face asta:

var selectedTime = new Date(),
    cbTime = new Date(); 
   
cbTime.setHours(selectedTime.getHours() - 5);
cbTime.setMinutes(selectedTime.getMinutes() - 30);

document.write('cbTime: ' + cbTime);
document.write('<br>');
document.write('selectedTime: ' + selectedTime);

Răspunsul #2

Ei bine, mai întâi, setarea orelor la -5.5 este lipsită de sens, codul va trunchia la un număr întreg (-5) și apoi va lua asta ca „cinci ore înainte de miezul nopții”, adică ora 19:00 ieri.

În al doilea rând, setHours (și alte funcții similare) modifică obiectul Date (încearcă console.log(cbTime)) și returnează timestamp-ul (numărul de milisecunde de la epoch).

Nu ar trebui să te bazezi pe formatul de ieșire al browserului care convertește obiectul Date într-un șir pentru tine și ar trebui în schimb să folosești funcțiile get*() pentru a-l formata tu însuți.