2012-07-05 41 views
12

Javascript chắc chắn không phải là điểm mạnh nhất của tôi. Tôi đã cố gắng này cho một vài giờ bây giờ và dường như bị mắc kẹt với định dạng ngày một nơi nào đó.Làm cách nào để thêm tuần vào ngày bằng javascript?

Tôi có một biểu mẫu mà người dùng đã chọn ngày (dd/mm/yyyy) và sau đó ngày này sẽ được thực hiện và 2 tuần sẽ được thêm vào ngày đó và ngày đó sẽ được sao chép sang một trường biểu mẫu khác.

Nỗ lực mới nhất của tôi dưới đây thậm chí không thêm ngày mà chỉ sao chép ngày đã chọn trong trường biểu mẫu này sang trường khác, nếu tôi chọn '03/02/2012 ', kết quả sẽ xuất hiện' T6 Mar 02 2012 00:00: 00 GMT + 0000 (GMT giờ chuẩn) ', do đó, xuất của nó trong định dạng Mỹ cũng như ngày đầy đủ. Làm thế nào để tôi nhận được nó ra đặt trong cùng một định dạng và thêm 2 tuần?

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    document.frmAccept.acceptLicence.value = date1; 

} 
+0

tôi thích [rằng ans] (http://stackoverflow.com/a/7751977/1509853) – oCcSking

Trả lời

3

Bạn đang gán date1 trở thành một đối tượng Date mà đại diện chuỗi bạn vượt qua nó. Những gì bạn thấy trong giá trị acceptLicense là biểu thị toString() của đối tượng ngày (hãy thử alert(date1.toString()) để xem điều này).

Để xuất như bạn muốn, bạn sẽ phải sử dụng nối chuỗi và various Date methods.

var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

Về thêm 2 tuần, bạn nên thêm 14 ngày vào ngày hiện tại;

date1.setDate(date.getDate() + 14); 

... điều này sẽ tự động xử lý sự gia tăng tháng, vv

Cuối cùng, bạn sẽ kết thúc với;

var date1 = new Date(acceptCompletionDate); 
date1.setDate(date1.getDate() + 14); 
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

N.B tháng trong JavaScript là 0-lập chỉ mục (Jan = 0, Tháng = 11), vì thế mà +1 trên tháng.

Sửa: Để giải quyết nhận xét của bạn, bạn nên xây dựng date như sau thay vào đó, như là đối số Date được coi là "Một chuỗi đại diện cho một RFC2822 hoặc ISO 8601 ngày." (see here).

var segments = acceptCompletionDate.split("/"); 
var date1 = new Date(segments[2], segments[1], segments[0]); 
+0

Cảm ơn phản hồi của bạn, nếu tôi chọn '04/01/2012' (dd/mm/yyyy) giá trị tôi nhận được trong trường khác là '15/4/2012 '(dd/mm/yyyy) vì vậy có vẻ như vẫn còn thêm 14 vào tháng thay vì ngày hoặc nhiều hơn ely định dạng vẫn còn sai ở đâu đó. – JBoom

+0

Tôi đoán nó cần định dạng bằng cách nào đó trước khi 14 ngày được thêm vào? vì (date1.getDate() + 14) giả sử định dạng của nó là mm/dd/yyyy – JBoom

+0

@JBoom: đối số 'Ngày' được cho là" Chuỗi đại diện cho ngày RFC2822 hoặc ISO 8601 ". ([xem tại đây] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse)). Nó có thể là tốt hơn để sử dụng constructor khác mà chấp nhận năm, tháng, ngày như các tham số riêng biệt (xem câu trả lời của tôi edited). – Matt

0

Điều này sẽ làm những gì bạn đang tìm kiếm.

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); 
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 
} 
42

Bạn có thể làm điều này:

var now = new Date(); 
now.setDate(now.getDate()+14); 
alert(now); 

Bạn có thể xem fiddle here.

Theo phương pháp documentation in MDN

Các setDate() thiết lập ngày tháng cho một ngày cụ thể theo giờ địa phương.

+0

@Jasper - bạn có thể cho tôi một ví dụ không thành công? Tôi đã đưa ra một liên kết đến mã trong câu trả lời của tôi. –

-1

Mọi thứ đều là there!

date1.toLocaleDateString() 

Thiswill trả lại cho bạn date1 như một String trong quy ước client

Để tạo một date2 ngày mới với 2 tuần nữa (2weeks = 2 * 7 * 24 * 60 * 60 giây):

var date2 = new Date(date1 + 60*60*24*7*2); 
+0

Đó là những gì ['toLocaleDateString'] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.6) ** nên ** làm, nhưng nó không có trong tất cả các trình duyệt (ví dụ: Chrome bỏ qua cài đặt hệ thống của tôi, cũng như các phiên bản gần đây, nhưng không phải phiên bản hiện tại của Firefox). – RobG

0

Để phân tích cú pháp định dạng dd/mm/yyyy và số ngày cụ thể với 14, bạn có thể làm điều gì đó như chia nhỏ các phần và tạo đối tượng ngày với y/m/d theo specfically. (Incrementing những ngày ngay lập tức) Cung cấp các dấu phân cách là luôn -, sau đây nên làm việc:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var parts = acceptCompletionDate.split("/"); 
    var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks) 
    document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done 

} 
0

Chỉ cần một số sửa đổi tối thiểu để trả lời Toast và bạn sẽ nhận được định dạng chính xác bạn đang tìm kiếm dd/mm/yyyy:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); //This adds the two weeks 

    var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate(); 
    var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth(); 

    document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear(); 
} 
Các vấn đề liên quan