2009-07-27 75 views
46

Tôi muốn tìm ngày bằng cách trừ số ngày X từ một ngày cụ thể trong JavaScript. Hàm JavaScript của tôi chấp nhận 2 tham số. Một là giá trị ngày và số còn lại là số ngày cần trừ.Tìm ngày bằng cách trừ số X ngày kể từ ngày cụ thể trong Javascript

Ví dụ: tôi vượt qua ngày đối số là ngày 27 tháng 7 năm 2009 và tôi chuyển đối số khác của tôi là 3. Vì vậy, tôi muốn tính ngày 3 ngày trước ngày 27 tháng 7 năm 2009. Vì vậy, ngày kết quả mà chúng tôi sẽ nhận là ngày 24 tháng 7 2009. Làm thế nào điều này có thể trong JavaScript. Cảm ơn vì bất kì sự giúp đỡ.

Trả lời

81

Đơn giản chỉ cần:

yourDate.setDate(yourDate.getDate() - daysToSubtract); 
+1

lớn Cảm ơn !!! – ajithmanmu

+3

Tôi không nghĩ rằng điều này sẽ hoạt động trừ khi ngày hiện tại của tháng nhiều hơn số ngày bạn trừ đi. – tvanfosson

+2

... ví dụ nó hoạt động ngày hôm nay với -3 vì hôm nay là 27 (ở Mỹ, nhưng hôm nay là ngày thứ 2, bạn sẽ kết thúc ngày mới là -1 và setDate sẽ chết nếu bạn cố gắng đặt ngày tháng của tháng tới số âm: – tvanfosson

1

Dưới đây là một ví dụ, tuy nhiên điều này không có loại kiểm tra (ví dụ nếu bạn sử dụng nó trên 2009/07/01 nó sẽ sử dụng một ngày âm hoặc ném ra một lỗi

.
function subDate(o, days) { 
// keep in mind, months in javascript are 0-11 
return new Date(o.getFullYear(), o.getMonth(), o.getDate() - days);; 
} 
+0

Điều đó dường như làm việc quá (trong Safari ít nhất). Tôi đã ngạc nhiên khi câu trả lời được chấp nhận hoạt động. Rõ ràng, nó sẽ điều chỉnh tháng/năm để trả lại ngày hợp lệ: ví dụ: Ngày (2009, 6, 0) trở thành Ngày (2009, 5, 30). –

+0

Làm việc trong cả Firefox và Safari cho tôi, bao gồm cả số âm. – tvanfosson

0

Đây là những gì tôi sẽ làm. Lưu ý bạn có thể đơn giản hóa biểu thức, tôi đã chỉ viết nó ra để làm cho nó rõ ràng bạn là nhân với số ngày bằng số mili giây trong một ngày.

var newDate = new Date(yourDate.getTime() - (days * 24 * 60 * 60 * 1000)); 
+2

Đừng làm điều này; sử dụng ngày thay thế. Điều này có thể gây ra lỗi ở những nơi quan sát Giờ tiết kiệm ánh sáng ban ngày. Ví dụ: 'Ngày 14 tháng 3 năm 2011' trừ 1 * 24 * 60 * 60 * 1000 là 'ngày 12 tháng 3 năm 2011' cho tôi. – Wiseguy

+0

Đã xác nhận. Cách tiếp cận này (sai hoặc ít nhất là bất ngờ) trừ đi thêm một giờ khi DST bắt đầu. – Seth

0

Chỉ cần một lựa chọn, mà tôi đã viết:

DP_DateExtensions Library

Đây có thể là quá mức cần thiết nếu TẤT CẢ bạn muốn làm là một trong những tính toán, nhưng nếu bạn đang đi để làm thao tác ngày càng có nhiều bạn có thể tìm thấy nó hữu ích.

Hỗ trợ ngày/giờ định dạng, ngày toán (thêm/phụ tùng ngày trừ), ngày so sánh, phân tích cú pháp ngày vv

+0

Tôi gặp lỗi khi nhấp vào liên kết .. :-( – ajithmanmu

+0

Có vẻ như đang làm việc cho tôi ... không có gì mà tôi có thể thấy trong nhật ký - bạn vẫn nhận được thông báo? Lỗi là gì? Cảm ơn –

22
function date_by_subtracting_days(date, days) { 
    return new Date(
     date.getFullYear(), 
     date.getMonth(), 
     date.getDate() - days, 
     date.getHours(), 
     date.getMinutes(), 
     date.getSeconds(), 
     date.getMilliseconds() 
    ); 
} 
+1

làm việc và IMHO là câu trả lời hay nhất, mỗi người trong số những người khác sẽ trả lại 38 nếu tôi thêm 7 ngày vào ngày 31. Cảm ơn bạn – Grandizer

+0

Cách tiếp cận này đã được chứng minh là đáng tin cậy hơn đối với tôi - nó trả về một đối tượng 'Date', câu trả lời được chấp nhận cho tôi một 'Int' – brichins

+0

Và điều gì sẽ xảy ra nếu bạn đang ở Ngày 1 của tháng, và bạn trừ ngày và nó đi tiêu cực? Có' Ngày' xử lý? – Atticus

2

Ở đây tôi đang đăng một câu trả lời hơn và điều đó sẽ trở lại ngày ở định dạng cụ thể .

Trước tiên, bạn có thể nhận được ngày hiện tại 2013/10/08 như sau

function Cureent_Date() { 
    var today_GMT = new Date(); 
    var dd = today_GMT.getDate(); 
    var mm = today_GMT.getMonth() + 1; //January is 0! 
    var yyyy = today_GMT.getFullYear(); 
    if (dd < 10) { 
     dd = '0' + dd 
    } 
    if (mm < 10) { 
     mm = '0' + mm 
    } 
    current_date = mm + '/' + dd + '/' + yyyy; 
    alert("current_date"+current_date); 

    Back_date(); 
} 

Now Get trở lại cơ sở ngày X ngày

function Back_date() 
{  
    var back_GTM = new Date(); back_GTM.setDate(back_GTM.getDate() - 2); // 2 is your X 
    var b_dd = back_GTM.getDate(); 
    var b_mm = back_GTM.getMonth()+1; 
    var b_yyyy = back_GTM.getFullYear(); 
    if (b_dd < 10) { 
     b_dd = '0' + b_dd 
    } 
    if (b_mm < 10) { 
     b_mm = '0' +b_mm 
    } 

    var back_date= b_mm + '/' + b_dd + '/' + b_yyyy; 
    alert("back_date"+back_date); 
} 

Vì vậy, Hôm nay là 10/08/2013 nên nó sẽ trả lại 10/06/2013.

Check Live Demo here Hy vọng câu trả lời này sẽ giúp bạn.

6

Không bao giờ sử dụng giải pháp này yourDate.setDate (yourDate.getDate() - daysToSubtract);

nó wont work trong trường hợp ngày của bạn là ngày 1 tháng và bạn muốn xóa một số ngày nói 1.

Thay vì đi cho dưới đây giải pháp mà sẽ làm việc luôn

var newDate = new Date (yourDate .getTime() - (ngày * 24 * 60 * 60 * 1000));

+0

Đây là giải pháp tốt nhất và đơn giản nhất mà tôi đã tìm thấy cho đến nay xử lý tất cả các trường hợp ranh giới mà mọi người khác dường như bị bỏ qua. – tokyo0709

0

đây là ám chỉ đến trên câu trả lời séc fiddle này

https://jsfiddle.net/uniyalguru/azh65aa0/

function Cureent_Date() { 
var today_GMT = new Date(); 
var dd = today_GMT.getDate(); 
var mm = today_GMT.getMonth() + 1; //January is 0! 
var yyyy = today_GMT.getFullYear(); 
if (dd < 10) { 
    dd = '0' + dd 
} 
if (mm < 10) { 
    mm = '0' + mm 
} 
current_date = mm + '/' + dd + '/' + yyyy; 
Các vấn đề liên quan