基于2个输入计算

时间:2014-01-08 11:04:08

标签: javascript input

我尝试在表单中添加字段,用户可以使用timePicker为shift选择start_time和end_time,然后填充名为total_hours的字段,其中包含2个其他字段输入字段。

function findTotalHours(){

var start_time = parseInt(document.getElementById("start_time").value);
var end_time = parseInt(document.getElementById("end_time").value);
var sub_start = start_time.substr(0,1);
var sub_end = end_time.substr(0,1);
var result = sub_end - sub_start;
document.getElementById('total_hours').value = result; 
}

我收到了以下控制台错误:

  

未捕获的TypeError:对象NaN没有方法' substr'

     

未捕获的TypeError:对象9没有方法' substr' (var sub_start =   start_time.substr(0,1))

timePicker将时间存储为hh:mm格式,所以我现在尝试删除分钟和冒号,以便在考虑如何处理分钟之前尝试显示total_hours。 / p>

有关如何修复此代码的任何建议,以及可能如何以该格式处理会议记录,将不胜感激。

http://jsfiddle.net/Bpw6Y/

3 个答案:

答案 0 :(得分:0)

我建议您首先读取两个输入的值,然后将它们解析为Date对象,然后执行减法(我包括绝对函数以补偿切换值)。这是一个可能的解决方案:

var date_1 = document.getElementById("date_1").value;
var date_2 = document.getElementById("date_2").value;

var d_1 = Date.parse(date_1);
var d_2 = Date.parse(date_2);
var diff_milliseconds = Math.abs(d_2 - d_1);
var diff_hours = diff_milliseconds / 1000 / 60 / 60;

alert(diff_hours + " hours difference");

希望有所帮助。

此致 拉尔夫

答案 1 :(得分:0)

使用parseInt,您可以将两个输入标记中的值转换为数字。

你正在获得

Uncaught TypeError: Object NaN has no method 'substr'

错误,因为parseInt之后返回的值是NaN(非数字),这意味着来自#start_time输入的值无效。

你正在获得

Uncaught TypeError: Object 9 has no method 'substr' (var sub_start = start_time.substr(0,1);)

错误,因为substr是一个字符串原型方法,而start_timeend_time是数字。您可能想要使用

var sub_start = (start_time+'').substr(0,1); 代替。

答案 2 :(得分:0)

试试这个

<script type="text/javascript">
    function findTotalHours() {

        var start_time = document.getElementById("start_time").value;
        var end_time = document.getElementById("end_time").value;

        var sub_start = start_time.substr(0, 2);    //Make sure date formate will be HH like 03,09 not 3,9
        var sub_end = end_time.substr(0, 2);
        var result = parseInt(sub_end) - parseInt(sub_start);     

        document.getElementById('total_hours').value = result;
    }


  </script>