Как я могу найти разницу между двумя временными полями и добавить результат в один и тот же документ внутри коллекции в MongoDB? - PullRequest
0 голосов
/ 21 июня 2019

Я использую функцию ниже, чтобы добавить одну строку в таблицу.Если пользователь нажмет кнопку «Добавить строку», будет вызвана следующая функция и добавлена ​​одна строка.В этой строке пользователь должен ввести время начала и окончания.

Теперь мой вопрос заключается в том, как рассчитать общее время от этого времени начала и окончания, как мы рассчитаем в Excel.

Я знаю, как они работают в Excel, но как сделать то же самое в таблице, как эта?

Я использую нод + MongoDB для рендеринга страниц.

var count=0;
function addRow(tableID) {
var id = "newlyaddedrow" + count;
var users = document.getElementById(tableID);

var row = `<tr class="info" style="cursor: pointer;background-color: #dbedf8;" id="${id}">
    <td><input id="workAllocation_DateID"  type="date" class="form-control"  name="@date"                   value=""/></td>         
    <td><input type="text" class="form-control"  name="@project_ID"        value=""/></td>             
    <td><input type="text" class="form-control"  name="@issue_Summary" value=""/></textarea></td>         
    <td><input type="text" class="form-control"  name="@short_Description"  value=""/></textarea></td>
    <td><input type="time" class="form-control"  name="@start_Time"            value=""/></td>
    <td><input type="time" class="form-control"  name="@end_Time"            value=""/></td>     
    <td><input type="time" class="form-control"  name="@total_Time"            value=""/></td>         
</tr>  `;

count++;

}

Ниже структура у меня в коллекции мангустов.

И я хочу вычислить это общее время, когда пользователь вводит start_time и end_time.

project_ID:"xxxx"
issue_Summary:"aaaa"
short_Description:"aaaa"
start_Time:"02:02"
end_Time:"03:02"
total_Time:""
_id:5d0ca14e138a7628948804af
date:2019-06-21 05:30:00.0001

Есть ли способ сделать это?Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Я пробовал с событием, и оно работает отлично.

Это событие происходит onblur () этого конкретного столбца в строке

function calculateTime(){
var startTime = new Date();
var endTime = new Date();
var totalTime = new Date();     
var startTimeStr = '';   
var endTimeStr = '';
var totalTimeStr = '';
if(event.target.name == '@start_Time' && event.target.value != ''){
    startTimeStr = event.target.value;
    if((event.target.parentElement.nextElementSibling.firstElementChild).value != ''){
        endTimeStr = (event.target.parentElement.nextElementSibling.firstElementChild).value;
    }     
}else if(event.target.name == '@end_Time' && event.target.value != ''){
    endTimeStr = event.target.value;
    if((event.target.parentElement.previousElementSibling.firstElementChild).value != ''){
        startTimeStr = (event.target.parentElement.previousElementSibling.firstElementChild).value;
    }  
    totalTimeStr = (event.target.parentElement.nextElementSibling.firstChild);
}
if(startTimeStr != '' && endTimeStr!= ''){
    startTime = startTime.setHours(startTimeStr.split(':')[0],startTimeStr.split(':')[1]);
    endTime = endTime.setHours(endTimeStr.split(':')[0],endTimeStr.split(':')[1]);
    if(startTime > endTime){
       alert('End time cannot be before start time!!!');
    }else{
        totalTime = endTime - startTime;
        var hours = Math.floor(((totalTime / (1000*60*60)) % 24));
        var minutes = Math.floor(((totalTime / (1000*60)) % 60));
        totalTimeStr.value = hours +':'+ minutes;
        console.log('Total Time' +totalTimeStr);
    }
}

}

0 голосов
/ 21 июня 2019

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

var start_Time = "02:02";
var end_Time ="03:05";

// Parsing as dates using a common date
var start_dt = new Date("1/1/1900 " + start_Time);
var end_dt = new Date("1/1/1900 " + end_Time);

// Calculate difference
var total_dt = end_dt - start_dt;

// Convert total_dt (which is in miliseconds) to hours and minutes
total_dt = total_dt/1000;
var sec = Math.floor(total_dt % 60);
total_dt = total_dt/60; 
var min = Math.floor(total_dt % 60);
total_dt = total_dt/60; 
var hours = Math.floor(total_dt % 24);  

console.log( hours +":" + min) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...