2013-02-04 37 views
14

Tôi gặp một vấn đề nhỏ mà sẽ rất tuyệt vời khi có sự trợ giúp. Tôi đang tạo một biểu mẫu nhỏ mà tôi muốn có một ngày hiện tại được định dạng 'dd/mm/yyyy' và thêm một năm (s) biến từ một hộp thả xuống để tạo ra một ngày hết hạn cuối cùng. Vấn đề duy nhất là tôi không biết cách phân tích cú pháp ngày bắt đầu dưới dạng biến ngày tháng để hoàn thành việc tính toán. Bất kỳ suy nghĩ hoặc trợ giúp nào sẽ được đánh giá cao. Paul.Jquery/Javascript - Thêm năm tới ngày biến

<script> 
    $(document).ready(function() { 
     $("#registerfor, #startdate, ").change(function() { 
      // Get Variables 
      var startdate = $("#startdate").val(); 
      var registerfor = $("#registerfor").val(); 
      // Add Years to Date 
      var expirydate = startdate + registerfor; 
      // Send Result on 
      $("#expires").val(expirydate); 
     }); 
    }); 
</script> 
<input name="startdate" id="startdate" value="dd/mm/yyyy" /> 
<select id="registerfor" name="registerfor"> 
    <option value="1">1 Year</option> 
    <option value="2">2 Years</option> 
    <option value="3">3 Years</option> 
</select> 
+0

bạn có đang sử dụng bất kỳ câu hỏi nào về điều này không? – KAsh

+0

Hi @ kash yes Tôi hy vọng sẽ sử dụng Jquery – Brandrally

Trả lời

7

Đôi khi những gì trông giống như một nhiệm vụ khá thẳng về phía trước trở nên khá phức tạp.

$(document).ready(function() { 

    $("#registerfor, #startdate").change(function() { 

     var str = $("#startdate").val(); 

     if(/^\d{2}\/\d{2}\/\d{4}$/i.test(str)) { 

      var parts = str.split("/"); 

      var day = parts[0] && parseInt(parts[0], 10); 
      var month = parts[1] && parseInt(parts[1], 10); 
      var year = parts[2] && parseInt(parts[2], 10); 
      var duration = parseInt($("#registerfor").val(), 10); 

      if(day <= 31 && day >= 1 && month <= 12 && month >= 1) { 

       var expiryDate = new Date(year, month - 1, day); 
       expiryDate.setFullYear(expiryDate.getFullYear() + duration); 

       var day = ('0' + expiryDate.getDate()).slice(-2); 
       var month = ('0' + (expiryDate.getMonth() + 1)).slice(-2); 
       var year = expiryDate.getFullYear(); 

       $("#expires").val(day + "/" + month + "/" + year); 

      } else { 
       // display error message 
      } 
     } 
    }); 
}); 

Here là một điểm nhấn để bạn có thể thấy nó hoạt động.

+0

Cảm ơn heaps Bruno. Nghiêm túc nó là rất nhiều đánh giá cao! – Brandrally

+0

Bạn được chào đón :) – Bruno

+1

Điều này dường như không còn hoạt động nữa. – user1477388

1
var dt = new Date($("#startdate").val()); 

var updateDate = dt.setDate(dt.getFullYear() + $("#registerfor").val()); 

var dd = updateDate.getDate(); 
var mm = updateDate.getMonth(); 
var y = updateDate.getFullYear(); 

var someFormattedDate = dd + '/'+ mm + '/'+ y; 
console.log(someFormattedDate); 
+0

Hi @don, tôi đánh giá cao suy nghĩ của bạn, mặc dù tôi thực sự đang đấu tranh để thực hiện công việc giải pháp của bạn. Tôi thấy logic, nhưng nó sẽ không thực hiện cho phù hợp với giải pháp. Nếu tôi muốn thêm 2 năm đến 02/10/2012 để trường hết hạn hiển thị ngày 02/10/2014 thì giải pháp trên không hoạt động. Tôi đánh giá cao suy nghĩ của bạn và đầu vào của bạn mặc dù. – Brandrally

+0

@Brandrally Kiểm tra mã cập nhật của tôi – DON

+0

Xin lỗi bạn đời. Đoạn mã này đang trở nên tốt hơn cho tôi. Nó không chuyển đổi thành một ngày không may. Tôi đã làm một kiểm tra cảnh báo và var updateDate trả về một chuỗi tương tự như 3074335200000 vì vậy nhận được tháng/ngày/năm trong số đó là nơi nó misbehaving. – Brandrally

-1

nhiều bảng chọn ngày jquery có sẵn trên mạng

This

ai yêu thích của tôi, dễ thực hiện và chỉnh sửa theo nhu cầu của chúng tôi.

nếu bạn muốn sử dụng kịch bản từ mã của bạn, bạn có thể trực tiếp vượt qua các giá trị ngày tháng để var STARTDATE như

var startdate=<?php echo date("Y-m-d")?> 

thử .. điều này có thể giúp đỡ.

+1

Xin chào Kash, cảm ơn vì phản hồi của bạn, mặc dù không may là tôi cần gửi biến từ một trường đã được thiết lập và vì vậy tôi sẽ không thể sử dụng đề xuất của bạn. Chúc mừng cho suy nghĩ của bạn mặc dù. – Brandrally

+0

:) Rất vui được nghe bạn .. – KAsh

0

Dude, nó đã hoạt động. Nếu bạn vẫn muốn chuyển đổi trong ngày sau đó làm điều này:

var dat=Date.parse(startdate); 
+0

Xin chào Ivan, Xin chúc mừng nó đã hoạt động. Đoạn mã trên tạo ra kết quả tương tự như 05/10/20122 và Bằng cách phân tích cú pháp ngày tôi nhận được là một con số tương tự như: 13365720000002 – Brandrally

0

tôi sẽ:

  • đặt ngày trong một định dạng mà Date.parse có thể làm việc độc đáo với (mm/dd/yyyy)
  • thêm số mili giây trong một lần trong năm tùy chọn chọn
  • Định dạng lại các giá trị mới cho một định dạng con người có thể đọc được và cư #expires

    var dateArr = $("#startdate").val().split();
    var niceDate = Number(dateArr[1]) + "/" + Number(dateArr[0]) + "/" + Number(dateArr[2]);

    var expDate = Date.parse(niceDate) + 365*24*60*60*1000*Number($("#registerfor").val());

    $("#expires").val(expDate.getMonth()+1 + "/" + expDate.getDate() + "/" + expDate.getFullYear());

Nếu bạn cần ngày 2 chữ số và tháng đối với ngày hết hạn, bạn có thể có các biến bổ sung mà tổ chức một chuỗi phiên bản của họ và kiểm tra cái gì đó như :
var padMonth = expDate.getMonth()+1;
if(expDate.getMonth()+1 < 10) padMonth = "0" + Number(expDate.getMonth()+1);

Sau đó, bạn sẽ sử dụng padMonth trong $ ("# hết hạn"). Val (...)

0

Liên kết này cung cấp câu trả lời tốt nhất về làm việc với các hoạt động ngày trong Javascript

http://msdn.microsoft.com/en-us/library/ee532932(v=vs.94).aspx

+1

Vui lòng không trả lời chỉ với một liên kết, Nếu ngắt liên kết bạn trả lời là vô ích. Thay vào đó, hãy sử dụng liên kết dưới dạng nguồn hoặc tham chiếu câu trả lời của bạn. –

28

Một giải pháp nhanh chóng và dễ dàng:

var myDate = new Date(); 
myDate.setFullYear(myDate.getFullYear() + nbYearsToAdd); 

"nbYearsToAdd" có thể là tiêu cực.

+2

sử dụng 'setFullYear' vì' setYear 'không được dùng nữa: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear – dit

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