2017-08-23 41 views
0

ファイル入力があり、ロード後に.csvログ履歴各行の入力と日付の間の日付を比較したいと思います。これは、dateFromInput変数( "2022年1月1日20:00:00 UTC")のような静的な日付を持つが、入力から日付を渡した後ではない場合に機能します。それを動作させるためにコードを変更するには?助言がありますか?入力日時から時間間隔をマークする方法

//example log.csv file: 
 
/* 
 
2011-1-21 8:40:45,zzz,aaa 
 
2012-2-22 9:10:21,aaa,xxx 
 
2014-3-22 10:10:22,aaa,zzz 
 
2017-5-22 17:10:23,aaa,ccc 
 
*/ 
 
const compareDate = (a, b) => { 
 
    // a = first Input (each column), b = second Input (user's input) 
 
    if (a < b) { 
 
    alert("older date"); 
 
    return -1; 
 
    } // lt 
 
    else if (a === b) { 
 
    alert("same date"); 
 
    return 0; 
 
    } // eq 
 
    else if (a > b) { 
 
    alert("newer date"); 
 
    return 1; 
 
    } // gt 
 
    else return null; // error 
 
} 
 
const makeTableFromCSV = csv => { 
 
    let rows = csv.split("\r\n"), table = document.createElement("table"), tr, td, tdList; 
 
    for (let i = 1; i < rows.length - 1; i++) { 
 
    tr = document.createElement("tr"); 
 
    tdList = rows[i].split(","); 
 
    for (let j = 0; j < tdList.length; j++) { 
 
     td = document.createElement("td"); 
 
     if (j === 0) { // First column = date 
 
     td.className = "log-table__cell"; 
 
     } 
 
     td.innerHTML = tdList[j]; 
 
     tr.appendChild(td); 
 
    } 
 
    table.appendChild(tr); 
 
    } 
 
    document.body.appendChild(table); 
 
} 
 
const clearInput = input => input.value = ""; 
 
const formatDate = (data, date) => date = new Date(data); 
 
const convertDateToMiliseconds = date => date.getTime(); 
 
const addClassToRow = (row, className) => row.classList.add(className); 
 
const getDateFromColumn = collection => { 
 
    let dateColumns = document.getElementsByClassName(collection); 
 
    const columns = Array.from(dateColumns); 
 
    return columns; 
 
} 
 
const onFileSelected = ev => { 
 
    const selectedFile = ev.target.files[0]; 
 
    const reader = new FileReader(); 
 
    reader.onload = ev => { 
 
    makeTableFromCSV(ev.target.result); 
 
    if (ev.target) { 
 
     const columns = getDateFromColumn("log-table__cell"); 
 
     columns.forEach(column => { 
 
     let dateFromRow = formatDate(column.innerHTML); 
 
     let milisecondsFromRow = convertDateToMiliseconds(dateFromRow); 
 
     //const inputValue = dateYear.value + " " + dateHour.value;   
 
     //const dateFromInput = new Date("1 January 2022 20:00:00 UTC"); 
 

 
     // ADDED CODE 
 
     var dateInput = document.getElementById("date1"); 
 
     var timeInput = document.getElementById("date2"); 
 
     var dateTime = dateInput.value + " " + timeInput.value; 
 
     var dateFromInput = new Date(dateTime); 
 
     // ADDED CODE ENDS 
 

 
     const inputDateToMs = dateFromInput.getTime(); 
 
     const compared = compareDate(milisecondsFromRow, inputDateToMs); 
 
     if (compared === -1) { 
 
      addClassToRow(column, "highlighted"); 
 
     } 
 
     console.log(compared, milisecondsFromRow, inputDateToMs); 
 
     }); 
 
    } 
 
    }; 
 
    reader.readAsText(selectedFile); 
 
}
.highlighted { 
 
    background: gray; 
 
}
<input type="file" onchange="onFileSelected(event)"> 
 
<br> 
 
<input type="date" id="date1"> 
 
<input type="time" id="date2"> 
 
<button id="check_date">Compare</button>

答えて

1

私はこのヘルプを願っています。

HTML

<input type="date" id="date"> 
<input type="time" id="time"> 
<button id="check">Compare</button> 

jQueryの

<script> 
$(function() { 
    $("#check").click(function() { 
    var date1 = new Date("2011-1-21 8:40:45"); // date from csv row 
    var date2 = new Date($("#date").val() + " " + $("#time").val()); 

    // the rest of the codes... 
    }); 
}); 
</script> 

JAVASCRIPT

var dateInput = document.getElementById("date"); 
var timeInput = document.getElementById("time"); 
var dateTime = dateInput.value + " " + timeInput.value; 
var date1 = new Date("2011-1-21 8:40:45") // date from csv row 
var date2 = new Date(dateTime); 

// the rest of the codes... 

YOURコード

const onFileSelected = ev => { 
    const selectedFile = ev.target.files[0]; 
    const reader = new FileReader(); 
    reader.onload = ev => { 
    makeTableFromCSV(ev.target.result); 
    if (ev.target) { 
     const columns = getDateFromColumn("log-table__cell"); 
     columns.forEach(column => { 
     let dateFromRow = formatDate(column.innerHTML); 
     let milisecondsFromRow = convertDateToMiliseconds(dateFromRow); 
     //const inputValue = dateYear.value + " " + dateHour.value;   
     //const dateFromInput = new Date("1 January 2022 20:00:00 UTC"); 

     // ADDED CODE 
     var dateInput = document.getElementById("date1"); 
     var timeInput = document.getElementById("date2"); 
     var dateTime = dateInput.value + " " + timeInput.value; 
     var dateFromInput = new Date(dateTime); 
     // ADDED CODE ENDS 

     const inputDateToMs = dateFromInput.getTime(); 
     const compared = compareDate(milisecondsFromRow, inputDateToMs); 
     if (compared === -1) { 
      addClassToRow(column, "highlighted"); 
     } 
     console.log(compared, milisecondsFromRow, inputDateToMs); 
     }); 
    } 
    }; 
    reader.readAsText(selectedFile); 
} 
+0

これはどのように動作するのかわかりません。あなたのコードを私のものと組み合わせて、jsfiddleへのリンクを投稿できますか?ありがとうございました – miqezjo

+0

@miqezjoは編集編集の回答 –

+0

私はあなたのコードを追加し、それは動作しません。私はそれがクリックで入力から日付を取得する必要がありますと思う。上のコードを見てください – miqezjo

関連する問題