2012-02-01 3 views
5

У меня есть следующий код, чтобы получить текущий день:Как получить последний день предыдущего месяца в Javascript или JQuery

var month=new Array(12); 
month[0]="January"; 
month[1]="February"; 
month[2]="March"; 
month[3]="April"; 
month[4]="May"; 
month[5]="June"; 
month[6]="July"; 
month[7]="August"; 
month[8]="September"; 
month[9]="October"; 
month[10]="November"; 
month[11]="December"; 

var d = new Date(); 
var curr_date; 
if (d.getDate() == 1) 
{ 
    curr_date = d.getDate(); 
} 
else 
{ 
    curr_date = d.getDate() - 1; 
} 

var curr_month = d.getMonth() + 1; //months are zero based 
var curr_year = d.getFullYear(); 
var message_day = curr_year + "_" + curr_month + "_" + curr_date; 
var sql_day = month[curr_month - 1].substring(0,3) + curr_date.toString() + curr_year.toString(); 

if (curr_date == "1") 
    { 
     document.write(sql_day + " " + message_day); 
    } 

Это отлично подходит для получения текущего дня, но теперь мне нужно получить последний день последнего месяца, если это начало нового месяца.

прямо сейчас это будет производить:

Feb12012 2012_2_1 

но то, что мне нужно выход есть:

Jan312012 2012_1_31 

Благодаря

ответ

14
var d=new Date(); // current date 
d.setDate(1); // going to 1st of the month 
d.setHours(-1); // going to last hour before this date even started. 

d содержит последнюю дату предыдущего месяца. d.getMonth() и d.getDate() отражают это.

Это должно работать в любой дате api, которая обертывает c time.h. См this

+0

Спасибо, это сработало очень хорошо. –

1

Просто вычесть один из день-месяц:

var today = new Date(); 
var yesterday = new Date().setDate(today.getDate() - 1); 

Если "d ate "(день месяца) равен 1, после чего установка нуля будет давать дату, представляющую последний день предыдущего месяца. Ваш код уже был довольно близок; вы могли бы просто построить новый экземпляр Date:

if (d.getDate() === 1) 
    curr_date = new Date().setDate(0).getDate(); 

На самом деле вам не нужно даже «если» заявление:

curr_date = new Date().setDate(d.getDate() - 1).getDate(); 

и что будет работать на любой день месяца.

+0

по какой-то причине, я не получаю вывод, которого я ожидаю: http://jsfiddle.net/gT6eZ/1/ –

11

Это отлично работает для меня:

var date = new Date(); 
date.setDate(0); 

дата теперь содержит в последний день предыдущего месяца.

Смежные вопросы