2011-09-19 51 views
7

Hãy nói rằng tôi có 3 biến như thế này:javascript ngày ngày cuối cùng của tháng trước

var Month = 8; // in reality, it's a parameter provided by some user input 
var Year = 2011; // same here 
var FirstDay = new Date(Year, Month, 1); 

Bây giờ tôi muốn có giá trị của một ngày trước khi ngày đầu tiên của tháng trong một biến. Tôi đang làm điều này:

var LastDayPrevMonth = (FirstDay.getDate() - 1); 

Nó không hoạt động như kế hoạch. Quyền làm gì?

Cảm ơn.

Trả lời

13
var LastDayPrevMonth = new Date(Year, Month, 0).getDate(); 
+0

Điều này trả về ngày của ngày nhưng không phải là ngày chính nó: 31, 28, 31 .. – frenchie

+1

Sau đó, chỉ cần loại bỏ '.getDate()'. getDate trả về ngày trong tháng. Có vẻ như đó là những gì bạn muốn trong câu hỏi của bạn. – Will

0

Tạo đối tượng Date mới và vượt qua đối tượng khác bị ép buộc với số mili giây kể từ Unix epoch và sau đó trừ đi cả ngày (tính bằng mili giây).

var LastDayPrevMonth = new Date(FirstDay - 864e5); 

jsFiddle.

+0

Những gì nó nói. Tôi đã xóa dấu cộng. Hằng số là gì? Số giây trong một ngày? – frenchie

+0

@renchie: Mili giây trong một ngày. Đúng, bạn không cần '+' khi sử dụng '-' làm toán tử :) – alex

+0

@frenchie - Tôi nghĩ câu trả lời của William Van Rensselaer tốt hơn - chỉ cần đặt ngày thành 0 và bạn nhận được ngày cuối cùng của tháng trước . – RobG

1
var LastDayPrevMonth = new Date(FirstDay); 
LastDayPrevMonth.setHours(FirstDay.getHours()-24); 
0
var FirstDay = new Date(Year, Month, 1); 
var lastMonth = new Date(FirstDay); 
lastMonth.setDate(-1); 
alert(lastMonth); 

Và hãy nhớ rằng 8 là tháng chín, không Aug trong JavaScript. :)

0

Nếu bạn cần tính toán điều này dựa trên ngày hôm nay (bạn muốn ngày cuối cùng của tháng trước), những điều sau đây sẽ hữu ích.

Nếu bạn chỉ quan tâm đến những tháng/ngày/năm, đây là đơn giản nhất và nhanh nhất mà tôi có thể nghĩ đến:

var d = new Date(); d.setDate(0); 
console.log(d); 

Nếu bạn muốn nửa đêm của ngày cuối cùng của tháng trước, sau đó:

var d = new Date(); d.setDate(0); d.setHours(0,0,0,0); 
console.log(d); 

Nếu bạn muốn biết ngày cuối cùng của tháng trước, dựa trên năm cung cấp/tháng:

var year = 2016, month = 11; 
var d = new Date(year, (month - 1)); d.setDate(0); d.setHours(0,0,0,0); 
console.log(d); 

Sau khi chạy bất kỳ ở trên, để có được những định dạng YYYY-M-D:

var str = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate(); 
console.log(str); 

Để xem phương pháp bổ sung có sẵn, và để xem những gì họ làm, bạn có thể read the docs.

Các vấn đề liên quan