2013-02-04 42 views
14

我有一個小麻煩,這將是偉大的有一些幫助。我正在創建一個小型表格,我想將當前日期格式爲'dd/mm/yyyy',並從下拉框中添加一年(s)變量以創建最終失效日期。唯一的問題是,我不知道如何將開始日期解析爲日期變量以完成計算。任何想法或幫助將不勝感激。保羅。jquery/Javascript - 添加年份至變量

<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

你使用任何jQuery的? – KAsh

+0

嗨@kash是的我希望能使用Jquery – Brandrally

回答

7

有時看起來很直接的任務變得相當複雜。

$(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是一個小提琴,所以你可以看到它的行動。

+0

感謝堆布魯諾。真的非常感謝! – Brandrally

+0

不客氣:) – Bruno

+1

這不再起作用。 – 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

嗨@don,我很欣賞你的想法,儘管我真的很努力使你的解決方案工作。我確實看到了邏輯,但它不會實現以適應解決方案。如果我想將2年添加到2012年2月10日,以便截止日期字段顯示02/10/2014,則上述解決方案本身不起作用。雖然我欣賞你的想法和你的意見。 – Brandrally

+0

@Brandrally檢查我更新的代碼 – DON

+0

對不起。這段代碼越來越好。它不會轉換爲不幸的日期。我進行了一次警報檢查,var updateDate返回一個類似於3074335200000的字符串,因此將月份/日期/年份排除在外是其行爲異常的地方。 – Brandrally

-1

很多日期選取器jQuery的都可以在網上

This

一個是我喜歡的,易於實施和編輯按我們的需求。

,如果你想使用腳本代碼,你可以直接傳遞日期值VAR STARTDATE

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

試試這個..也許會有幫助。

+1

你好卡什,謝謝你的迴應,但不幸的是我需要從一個既定的領域發送變量,所以我不能夠利用你的建議。歡呼你的想法,但。 – Brandrally

+0

:)很高興聽到你.. – KAsh

0

老兄,它已經在工作。如果你仍然想在轉換日期,然後這樣做:

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

嗨伊萬,祝它工作。上面的代碼產生了類似於2012年5月10日的結果,通過解析日期我得到的是一個看起來類似於以下內容的數字:13365720000002 – Brandrally

0

我想:

  • 把日期的格式,Date.parse可以用(MM/DD/YYYY)
  • 很好地工作
  • 格式化新的附加價值的毫秒數在一年時間所選擇的選項
  • 到人類可讀的格式和填充#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());

如果需要2位數的日和月爲截止日期,你可以有持有它們的字符串版本額外的變量,並檢查類似:
var padMonth = expDate.getMonth()+1;
if(expDate.getMonth()+1 < 10) padMonth = "0" + Number(expDate.getMonth()+1);

之後,您將在$(「#expires」)中使用padMonth。val(...)

28

一個快速簡便的解決方案的最佳答案:

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

「nbYearsToAdd」 可以是負的。

+2

使用'setFullYear'因爲'setYear'已被棄用:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear – dit