要更新的JavaScript结束日期更改开始日期的日期

问题描述:

对于我正在开发的网站,我使用表单来更新模型的不同字段。要更新的JavaScript结束日期更改开始日期的日期

其中一些字段需要根据其他值进行更新。例如,任务的每个实例都有一个开始日期,结束日期和长度,它们必须验证以下内容:End = Start + Lenght(周末不算在内,但这是次要问题)。

所以我想写会做的功能之一:

When the user changes the value of the input Start_date 
Get that date from the input field 
Get the value of the field Lenght 
Update the value of the input "End date" with (Start_date + Lenght) 

通过我的例子中涉及的三个输入有以下ID:id_start,id_lenght,id_finish。

这里是我写的,但它在所有不工作(没有发生明显的...):

<script> 
    $("#id_start").change(function() { 
     var start = new Date(); 
     var finish = new Date(); 
     var numberOfDays = document.getElementById('id_lenght').value; 
     start = document.getElementById('id_start').value; 
     finish.setdate(start.getDate()+document.getElementById('id_lenght')) 
     $('#id_finish').val(finish); 
    }); 
</script> 

在溶液中的任何暗示,使其工作将非常感激。 在此先感谢。

+0

Knockout.js将是完美的工作。您可以数据绑定元素并定义它们之间的可计算关系。 http://knockoutjs.com/将它与MomentJS结合起来,你也可以轻松地进行日期操作。 http://momentjs.com/ – 2014-10-17 12:24:57

+0

如果'$(“#id_start”)'是''使用'keyup'或'blur'事件。 – 2014-10-17 12:28:14

+0

@Burn你的意思是改变事件不适用于输入元素? – Emeric 2014-10-17 12:30:32

让我们来看看你的代码实际上在做什么。

var start = new Date(); 

在这里,您将创建一个新的Date对象。

start = document.getElementById('id_start').value; 

在这里,你的start值更改为用id =“id_start”的DOM元素的值。问题是,这个值不是Date对象。即使是新的HTML Date输入类型(它不受Firefox或IE支持)只会在您提取值时为您提供字符串。所以你已经创建了一个新的Date对象,然后立即抛出它。

所以现在开始不是Date,而是string。在这一行:

finish.setdate(start.getDate()+document.getElementById('id_lenght')) 

你试图调用一个字符串对象的不确定.getDate(),所以你会得到一个错误。

以下是您需要做的事情。该字符串(假设它是ISO格式:YYYY-MM-DDYYYY-MM-DDTHH:MM:SS)可用于创建新日期。

start = new Date(document.getElementById('id_start').value); 

现在开始实际上是一个日期对象,您可以添加以天为单位的长度来获得结束日期。

当然,您需要确保输入的格式是可接受的!有很多'日期选择器'选项(例如jQueryUi,有一个日期选择器),如果你只对支持Chrome感兴趣,那么这些工作很好。

+0

这很有道理。但是我的日期格式不是ISO,我使用'dd/mm/yyyy'。有没有办法修改你的线路来考虑它? (我正在考虑像Django的_ |日期:“d-m-Y”_) – Emeric 2014-10-17 13:14:29

+0

@Emeric,您可以使用jQuery dateFormat插件作为一个选项。有关相关问题,请参阅:http://*.com/questions/5250244/jquery-date-formatting。 – 2014-10-17 13:19:08

+0

谢谢。我也注意到你提到了DatePicker,我也在这里使用它。我已经对datepicker行进行了注释,以便处理这个新函数,但是当我取消注释DatePicker函数时,我注意到eventlistener Change不再起作用,并且也不模糊或关闭...... – Emeric 2014-10-17 13:23:53