2015-06-04 3 views
0

Я попытался показать время между двумя моментами при загрузке страницы. Пожалуйста, проверьте ниже мой код -Неправильное время JavaScript, отображаемое между двумя моментами

var start = document.getElementById("start").value; 
 
var end = document.getElementById("end").value; 
 

 
function hourDiff(start, end) { 
 
    start = start.split(":"); 
 
    end = end.split(":"); 
 
    var startDate = new Date(0, 0, 0, start[0], start[1], 0); 
 
    var endDate = new Date(0, 0, 0, end[0], end[1], 0); 
 
    var diff = endDate.getTime() - startDate.getTime(); 
 
    var hours = Math.floor(diff/1000/60/60); 
 
    diff -= hours * 1000 * 60 * 60; 
 
    var minutes = Math.floor(diff/1000/60); 
 
    
 
    return (hours < 9 ? "0" : "") + hours + ":" + (minutes < 9 ? "0" : "") + minutes; 
 
    //setTimeout(function(){hourDiff(start, end)},500); 
 
} 
 

 
document.getElementById("diff").value = hourDiff(start, end);
<input id="start" value="20:00"> <!-- 08.00 PM --> 
 
<input id="end" value="09:30"> <!-- 09.30 AM --> 
 

 
<input id="diff">

Я использовал время начала 20.00 и время окончания 09.30 различные между двумя время составляет = 13.30 часов, но она показывает неправильный час. Пожалуйста, проверьте и дайте мне знать.

Edit:

Кроме того, я хочу, как многие hour:minute:second оставили

+1

Является ли это правильное название для этой проблемы? – George

+1

В этом вопросе нет jQuery: D – tymeJV

+1

Также нет события onclick –

ответ

2

Если ваши даты всегда в одних и тех же формате чч: мм, почему бы вам не попробовать мое предложение.

Это довольно просто:

var hours = end[0] - start[0]; 
if(start[0] > end[0]) { 
    hours = 24 + hours; 
} 

var minutes = end[1] - start[1]; 
if(start[1] > end[1]) { 
    minutes = 60 + minutes; 
    if(hours == 0) { 
     hours = 23; 
    } else { 
     hours--; 
    } 
} 

Я просто вычитаем их друг с другом и реагировать, если начальное значение больше, чем конечное значение. Fiddle: https://jsfiddle.net/rvwr9h0w/1/

Редактировать

Я нашел простое решение, из-за пост дробовика ниндзя:

https://jsfiddle.net/rvwr9h0w/4/

var endDate = new Date(0, 0, (start > end)?1:0 , end[0], end[1], end[2]); 

Если время начала больше время окончания, просто установите дату окончания 1 день вперед.

+0

Как показывать секунды? – Chinmay235

1

Хорошо, проблема с вашим кодом заключается в том, что вы вычитаете более раннее время с более позднего времени, что приводит к отрицательной разнице во времени. Я думаю, что вы хотели сделать, чтобы система вычитала 9:30 утра на следующий день с 8:00 вечера в предыдущий день, но вы не указали никакой информации, которая указывала бы, что это отдельные дни.

У вас есть:

var startDate = new Date(0, 0, 0, 20, 0, 0); // 8:00pm, Dec 31st, 1899 (current TZ) 
var endDate = new Date(0, 0, 0, 9, 30, 0); // 9:30am, Dec 31st, 1899 (current TZ) 

(Год = 0 соответствует 1900, Месяц = ​​0 соответствует январю, а День = 0 соответствует 1 день до 1-го, который катится назад к 31 декабря)

Важная часть здесь состоит в том, что, установив все значения в 0, вы получаете тот же день, но в другой час. Таким образом, вы фактически получаете отрицательное значение в diff; код функционирует правильно, но дает отрицательное значение часа, потому что даты не соответствуют порядку.

-2

Попробуйте использовать математику.пол со всеми необходимыми математическими уравнениями для каждой части:

var start = document.getElementById("start").value; 
 
var end = document.getElementById("end").value; 
 

 
function hourDiff(start, end) { 
 
    start = start.split(":"); 
 
    end = end.split(":"); 
 
    var startDate = new Date(0, 0, 0, start[0], start[1], 0); 
 
    var endDate = new Date(0, 0, 0, end[0], end[1], 0); 
 
    var diff = endDate.getTime() - startDate.getTime(); 
 
    var msec = diff; 
 
var hh = Math.floor(msec/1000/60/60); 
 
msec -= hh * 1000 * 60 * 60; 
 
var mm = Math.floor(msec/1000/60); 
 
    
 
    return hh + ":" + mm; 
 
    //setTimeout(function(){hourDiff(start, end)},500); 
 
} 
 

 
document.getElementById("diff").value = hourDiff(start, end);
<input id="start" value="20:00"> <!-- 08.00 PM --> 
 
<input id="end" value="09:30"> <!-- 09.30 AM --> 
 

 
<input id="diff">

+0

Я ответил, что думал, что это вопрос; пользователь хотел «время между двумя моментами», я предусмотрел это. – oMiKeY

+0

Научитесь читать перед вами downvote, plz. – oMiKeY

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