Senick
Senick

Reputation: 101

Javascript: wrong date calculation

So I just have posted a question about this code (which was answered):

$(document).ready(Main); 

function Main() { 
    ConfigDate();         
} 


function ConfigDate() { 
    var currentTime = new Date(); 
    var dayofWeek = currentTime.getDay(); 

    var daysSinceThursday = (dayofWeek + 3) % 7 
    var lastThursday = new Date(currentTime.getDate() - daysSinceThursday); 
    var dd = lastThursday.getDate(); 

    var mm = lastThursday.getMonth() + 1; 
    var yyyy = lastThursday.getFullYear(); 

    $("#last_thursday").text(yyyy + " / " + mm + " / " + dd); 
} 

The problem now is that the date that appears in my cell is 1969 / 12 / 31 (which isn't even a thursday).

Did I do something wrong while calculating last thursday date?

Upvotes: 0

Views: 113

Answers (2)

nachito
nachito

Reputation: 7035

You're trying to set a Date based only on the day of the month of the last Thursday. Try something like this:

var daysSinceThursday = (dayofWeek + 3) % 7;
var lastThursday = new Date(currentTime.getTime());
lastThursday.setDate(currentTime.getDate() - daysSinceThursday);
var dd = lastThursday.getDate();

var mm = lastThursday.getMonth() + 1; 
var yyyy = lastThursday.getFullYear();

http://jsfiddle.net/rAuRF/3/

Upvotes: 2

gilly3
gilly3

Reputation: 91467

This is because .getDate() returns the day of the month. So you are building your date based on a serial number of something less than 30, which won't even set your seconds above 1.

Use .setDate() instead of building a new date:

date.setDate(date.getDate() - daysSinceThursday);

.setDate() will modify your existing date object, it doesn't return a new date.

Upvotes: 3

Related Questions