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>
これはどのように動作するのかわかりません。あなたのコードを私のものと組み合わせて、jsfiddleへのリンクを投稿できますか?ありがとうございました – miqezjo
@miqezjoは編集編集の回答 –
私はあなたのコードを追加し、それは動作しません。私はそれがクリックで入力から日付を取得する必要がありますと思う。上のコードを見てください – miqezjo