2012-02-01 8 views
5

Mam następujący kod, aby uzyskać bieżący dzień:Jak uzyskać ostatniego dnia poprzedniego miesiąca w JavaScript lub 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); 
    } 

To jest świetne do poruszania bieżący dzień, ale teraz muszę się ostatni dzień ostatniego miesiąca, jeśli jest to początek nowego miesiąca.

teraz to będzie produkować:

Feb12012 2012_2_1 

ale co muszę wyjścia:

Jan312012 2012_1_31 

Dzięki

Odpowiedz

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. 

teraz d zawiera ostatnią datę poprzedniego miesiąca. d.getMonth() i d.getDate() odzwierciedli to.

Powinno to działać w dowolnym api daty, który otacza c time.h. Zobacz this

+0

Dzięki, to zadziałało bardzo dobrze. –

1

Wystarczy odjąć jeden z dni, z miesiąca:

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

Jeśli "d "Właściwość" (dzień miesiąca) wynosi 1, a następnie ustawienie jej na zero da datę przedstawiającą ostatni dzień poprzedniego miesiąca. Twój kod był już całkiem blisko; można po prostu zbudować nową instancję Date:

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

W rzeczywistości nawet nie potrzebować „if”:

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

i że będziemy pracować dla dowolnego dnia miesiąca.

+0

z jakiegoś powodu, nie otrzymuję wyników, których oczekuję: http://jsfiddle.net/gT6eZ/1/ –

11

Działa to doskonale dla mnie:

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

data zawiera teraz ostatni dzień poprzedniego miesiąca.

Powiązane problemy