2013-02-04 41 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