2014-01-08 2 views
0

Я пытаюсь добавить поле в форму, где пользователь может использовать timePicker для выбора start_time и end_time для смены, и тогда будет заполнено поле с именем total_hours с разницей между 2 других поля ввода.Расчет на основе 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; 
} 

Я получаю консольную ошибку:

Uncaught TypeError: Object NaN has no method 'substr'

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

timePicker сохраняет время как формат hh:mm, поэтому я стараюсь, чтобы удалить минуты и двоеточие сейчас, чтобы попытаться получить total_hours пока не подумаю о том, как обрабатывать минуты.

Любые советы о том, как исправить этот код, и, возможно, как обрабатывать минуты, в этом формате будут очень признательны.

http://jsfiddle.net/Bpw6Y/

+0

могли бы вы предоставить полный JSFiddle пример? – cubitouch

+1

Входы start_time и end_time содержат неправильный номер – cosset

+0

Посмотрите ниже для ответа dude – Shadow

ответ

0

Я предлагаю вам сначала прочитать в значениях от ваших двух входов, а затем разобрать их, как Дату объекты, а затем выполнить вычитание (я включаю абсолютную функцию компенсации для коммутируемых значений). Вот возможное решение:

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"); 

Надеюсь, что это поможет.

С уважением, Ralfe

+0

Дает предупреждение Разница в часах NaN –

+0

Помните ли вы изменить «date_1» и «date_2» на все идентификаторы ваших входов? – ralfe

+0

Да, я сделал http: // jsfiddle.net/TGXg9/ –

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_time и end_time являются числами. Возможно, вы захотите использовать

var sub_start = (start_time+'').substr(0,1); вместо этого.

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> 
+0

Дает оповещение NaN –

+0

Обновлено, пожалуйста, зарегистрируйтесь сейчас –

+0

Работы сейчас, спасибо! Если вы знаете, как это можно адаптировать, чтобы включить также минуты, пожалуйста, дайте мне знать –

Смежные вопросы