2012-02-01 84 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()将反映它。

这应该适用于任何包含c time.h的api。见this

+0

谢谢,这工作得很好。 – 2012-02-01 18:15:05

1

就减一天的日:

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

如果“d吃“财产(月份的日期)是1,然后将其设置为零会给你一个代表上个月最后一天的日期。你的代码已经非常接近了;你可以只构造一个新的日期实例:

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/ – 2012-02-01 18:06:58

11

这完美的作品对我来说:

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

日期现在包含了前一个月的最后一天。

相关问题