2012-01-12 91 views
48

Tôi có hộp nhập lịch bắt đầu và hộp nhập lịch kết thúc. Chúng tôi muốn mặc định bắt đầu hộp nhập lịch 30 ngày trước ngày hiện tại và hộp nhập lịch kết thúc là ngày hiện tại. Đây là vars ngày của tôi.Cách nhận 30 ngày trước ngày hiện tại?

var today = new Date(), 
    dd = today.getDate(), 
    mm = today.getMonth(), 
    yyyy = today.getFullYear(), 
    month = ["January", "February", "March", 
     "April", "May", "June", "July", "August", 
     "September", "October" "November", "December"], 
    startdate = month[mm] + ", " + yyyy.toString(); 

Ngày kết thúc sẽ giống như var enddate = startdate - 30; Rõ ràng điều này sẽ không hoạt động.

Vì vậy, nếu ngày hiện tại là ngày 30 tháng 12 năm 2011 Tôi muốn ngày bắt đầu đọc 01 Tháng Mười Hai, 2011.

EDIT: Câu hỏi của tôi đã được trả lời ... loại. Date.today(); và Date.today(). thêm (-30); làm việc nhưng tôi cần ngày theo định dạng ngày 13 tháng 1 năm 2012. Không Thứ Sáu ngày 13 tháng 1 năm 2012 10:48:56 GMT -055 (EST). Bất kỳ giúp đỡ?

+0

http://stackoverflow.com/questions/563406/add-days-to-datetime -using-java-script Tôi nghĩ rằng có thể giúp đỡ. –

Trả lời

87

Hãy thử sử dụng tuyệt vời Datejs JavaScript date library (bản gốc không còn được duy trì, do đó bạn có thể quan tâm đến this actively maintained fork thay):

Date.today().add(-30).days(); // or... 
Date.today().add({days:-30}); 

[Chỉnh sửa]

Xem thêm các sắc Moment.js JavaScript date library:

moment().subtract(30, 'days'); // or... 
moment().add(-30, 'days'); 
+2

Tôi ước tôi có 10 phiếu bầu cho bạn ... – Ryley

+0

Tại sao bạn lại bỏ phiếu? – maerics

+0

Cảm ơn bạn đã chỉ cho tôi đến Date.js. –

1

tôi sử dụng date.js. Nó xử lý điều này một cách dễ dàng và chăm sóc của tất cả các nastiness nhuận năm.

33
startDate = new Date(today.getTime() - 30*24*60*60*1000); 

Phương pháp .getTime() trả về một timestamp JS chuẩn (mili giây kể từ khi Jan 1/1970) mà bạn có thể sử dụng các hoạt động toán học thường xuyên, có thể được đưa trở lại để đối tượng Date trực tiếp.

+3

+1 một nhưng tôi sẽ phiền toái như giây nhảy vọt, v.v. – maerics

+0

+1 - Datejs dễ đọc hơn; điều này dễ thực hiện hơn. – Blazemonger

96

Hãy thử điều này

var today = new Date() 
var priorDate = new Date().setDate(today.getDate()-30) 

Theo ghi nhận của @Neel, phương pháp này trở về ở định dạng Javascript Timestamp. Để chuyển đổi nó trở lại đối tượng ngày tháng, bạn cần phải chuyển nó lên một đối tượng Date mới; new Date(priorDate).

+11

Nếu không sử dụng thư viện bên ngoài, tôi thích giải pháp này nhất. Cảm ơn. – Gowiem

+9

Lưu ý rằng phương thức này trả về ở định dạng Dấu thời gian Javascript.Để chuyển đổi nó trở lại đối tượng ngày, bạn cần phải vượt qua ở trên để 'new Date (priorDate)' – Neel

1

tôi sẽ thích khoảnh khắc js

startDate = moment().subtract(30, 'days').format('LL') // January 29, 2015 

endDate = moment().format('LL'); // February 28, 2015 
34

Dưới đây là một giải pháp xấu xí cho bạn:

var date = new Date(new Date().setDate(new Date().getDate() - 30)); 
+9

Hilariously đây là giải pháp tốt nhất. –

+13

Trong Javascript, không ai có thể nghe thấy bạn hét lên ... –

+1

Đồng ý - đây là giải pháp tốt nhất. Đây là * chính xác * giải pháp câu trả lời của Rory McCrossan - nhưng súc tích, và hoàn chỉnh (không cần thư viện bên ngoài). –

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