2009-03-03 53 views
22

Với một đối tượng ngày, làm thế nào để có được ngày đầu tiên của tháng trước nó trong javascriptTìm ngày đầu tiên của tháng trước trong javascript

+0

một tiêu đề mô tả hơn có thể được tốt đẹp ... – helloandre

+0

tôi cập nhật tiêu đề – Prestaul

+0

http://stackoverflow.com/questions/594054/date-problem-in-java trông giống như câu hỏi trước của bạn là dành cho java. Vì vậy, không chính xác một bản sao :) –

Trả lời

32
function firstDayInPreviousMonth(yourDate) { 
    var d = new Date(yourDate); 
    d.setDate(1); 
    d.setMonth(d.getMonth() - 1); 
    return d; 
} 

EDIT: Được rồi ... Tôi đã chắc chắn học được một cái gì đó ở đây. Tôi nghĩ rằng đây là giải pháp đơn giản nhất mà bao gồm tất cả các trường hợp (và có, nó không làm việc cho tháng Giêng):

function firstDayInPreviousMonth(yourDate) { 
    return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1); 
} 
+0

Lưu ý rằng điều này sẽ FAIL cho một cái gì đó như: firstDayInPreviousMonth (ngày mới ("Mar 31 2009")). Xem các bình luận trên: http://stackoverflow.com/questions/499838/javascript-date-next-month – Shog9

+0

Nó sẽ không thất bại nếu anh ta setDate (1) trước khi thực hiện setMonth() –

+0

Có, nó hoạt động tốt. – Shog9

12

Sau đây nên làm việc:

now = new Date(); 
if (now.getMonth() == 0) { 
    current = new Date(now.getFullYear() - 1, 11, 1); 
} else { 
    current = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
} 

hãy ghi nhớ rằng tháng là zero- dựa nên tháng mười hai là chứ không phải 12.

Nhưng, như những người khác đã chỉ ra, liệu pháp quấn tháng, thậm chí như một phần của các nhà xây dựng nguyên tử, vì vậy sau đây cũng có thể:

0.123.
now = new Date(); 
firstDayPrevMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
+1

Tôi thích cách tiếp cận này, nhưng giải pháp của bạn thực sự là không chính xác. Khi getMonth() == 1, tháng là tháng Hai.Bạn muốn kiểm tra getMonth() == 0, và thậm chí không cần thiết vì hàm tạo ngày sẽ chấp nhận các giá trị âm và hoạt động chính xác. – Prestaul

+0

Bạn đang bỏ qua thực tế là setMonth sẽ bao bọc các giá trị. Câu trả lời của Prestaul hoạt động tốt cho tháng Giêng. – overslacked

+0

Có, nhưng không phải để quay trở lại một tháng mà số ngày ít hơn, thật không may. Tốt hơn là xây dựng ngày mới theo nguyên tử chứ không phải từng phần. – paxdiablo

2

Tôi thích giải pháp này. Nó có thể không phải là ngắn nhất, nhưng nó nhấn mạnh một số chức năng của phương pháp setDate() trên Date() đối tượng mà không phải ai cũng sẽ phải làm quen với:

function firstDayPreviousMonth(originalDate) { 
    var d = new Date(originalDate); 
    d.setDate(0); // set to last day of previous month 
    d.setDate(1); // set to the first day of that month 
    return d; 
} 

Nó làm cho việc sử dụng thực tế là .setDate (0) sẽ thay đổi ngày để trỏ đến ngày cuối cùng của tháng trước đó, trong khi .setDate (1) sẽ thay đổi ngày đó (tiếp theo) để trỏ đến ngày đầu tiên của tháng đó. Nó cho phép các libs Javascript cốt lõi thực hiện việc nâng hạng nặng.

Bạn có thể thấy working Plunk here.

0

Nó sẽ giúp bạn có được tháng trước và ngày cuối cùng.

function getLastMonth(){ 
     var now = new Date(); 
     var lastday = new Date(now.getFullYear(), now.getMonth(), 0); 
     var firstday = new Date(lastday.getFullYear(), lastday.getMonth(), 1); 
     var lastMonth = firstday.getDate()+'/'+(firstday.getMonth()+1)+'/'+firstday.getFullYear()+' - '+lastday.getDate()+'/'+(firstday.getMonth()+1)+'/'+lastday.getFullYear(); 
     return lastMonth; 
} 
Các vấn đề liên quan