date.setHours() not working

13,693

Solution 1

The reason is that setHours(), setMinutes(), etc, take an Integer as a parameter. From the docs:

...

The setMinutes() method sets the minutes for a specified date according to local time.

...

Parameters:

An integer between 0 and 59, representing the minutes.

So, you could do this:

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

Solution 2

Well first off setting the hours to -5.5 is nonsensical, the code will truncate to an integer (-5) and then take that as "five hours before midnight", which is 7PM yesterday.

Second, setHours (and other functions like it) modify the Date object (try console.log(cbTime)) and return the timestamp (number of milliseconds since the epoch).

You should not rely on the output format of the browser converting the Date object to a string for you, and should instead use get*() functions to format it yourself.

Solution 3

According to this:

http://www.w3schools.com/jsref/jsref_sethours.asp

You'll get "Milliseconds between the date object and midnight January 1 1970" as a return value of setHours.

Perhaps you're looking for this:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_sethours3

Edit: If you want to subtract 5.5 hours, first you have to subtract 5 hours, then 30 minutes. Optionally you can convert 5.5 hours to 330 minutes and subtract them like this:

var d = new Date();
d.setMinutes(d.getMinutes() - 330);
document.getElementById("demo").innerHTML = d;
Share:
13,693
user1181942
Author by

user1181942

Updated on June 16, 2022

Comments

  • user1181942
    user1181942 almost 2 years

    I am trying to subtract hours from a given date time string using javascript. My code is like:

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

    Where selectedTime is the given time (time that i pass as parameter).

    So suppose selectedTime is Tue Sep 16 19:15:16 UTC+0530 2014 Ans I get is : 1410875116995

    I want answer in datetime format. Am I doing something wrong here? Or there is some other solution?