将选定日期与MySQL查询生成的表列或日期数组进行比较
我有一个如下所示的页面:
我尝试做的是将";Holiday Date:";选择与其下面表格中的";date";列中的行值进行比较。我尝试过使用这样的代码:
function dateChk(){
var dt1 = document.getElementById('PHDate').value;
var dt2 = document.getElementById('phdateadd').value;
if (dt1 == dt2) {
alert("This date already assigned, please try again.");
document.getElementById('phdateadd').value = 0;
}
}
但这只适用于第一行。然后我想要做这样的数组:
<input id="phdateadd" name="phdateadd" type="date" onchange="myFunction()" required>
<p id="demo"></p>
<script>
var dates= ["2021-01-01", "2021-02-12", "2021-02-13", "2021-04-02", "2021-05-01",
"2021-05-13", "2021-05-14", "2021-05-26", "2021-05-30", "2021-05-31",
"2021-07-06", "2021-07-20", "2021-08-10", "2021-08-31", "2021-09-16",
"2021-10-02", "2021-10-19", "2021-11-04", "2021-12-25"];
function checkDate(date) {
return date == document.getElementById("phdateadd").value;
}
function myFunction() {
document.getElementById("demo").innerHTML = dates.find(checkDate);
var chk = document.getElementById("demo").innerHTML;
if ( chk != "undefined" ) {
alert("This date already assigned, please try again.");
document.getElementById("phdateadd").value = 0;}
}
</script>
这确实有效,但是我必须将该列中的所有日期指定为数组。我的想法是从MySQL查询传递数据,日期值格式类似于数组,但它似乎无法识别。以下是查询:
SELECT CONCAT('["',GROUP_CONCAT(phdate SEPARATOR '", "'),'"]') As arrdate FROM table1;
which returns
["2021-01-01", "2021-02-12", "2021-02-13", "2021-04-02", "2021-05-01", "2021-05-13", "2021-05-14",
"2021-05-26", "2021-05-30", "2021-05-31", "2021-07-06", "2021-07-20", "2021-08-10", "2021-08-31",
"2021-09-16", "2021-10-02", "2021-10-19", "2021-11-04", "2021-12-25"]
因此,我将结果显示在页面中:
<% phDates.forEach((phDates, index) => { %>
<tr><td><p id="phdates" name="phdates" value="<%= phDates.arrdate %>"><%= phDates.arrdate %>
<% }) %></p><p id="demo" name="demo">b</p><br><p id="demo1" name="demo1">a</p></td></tr>
<script>
var dates = document.getElementById("phdates").innerHTML;
document.getElementById("demo").innerHTML = dates;
</script>
如您所见,来自MySQL查询的arrdate
值和demo
显示的格式相似。当我在var dates
中指定数组时,demo
值是不同的(如上面的代码片断所示):
如果我故意让MySQL如上所述返回数据,尽管它仍然无法识别数据。我认为如果这种方法可行,我甚至不需要将选择的日期与表中的列进行比较。我使用$( "div" ).toArray()
进行了测试,但也无法使其工作。
解决方案
实际上有一个简单的解决方案。让我们从您的查询开始我们的思考过程,它离解决方案不是很远(这还不是很好,但已经很接近了-足以开始我们的思考过程):
SELECT CONCAT('["',GROUP_CONCAT(phdate SEPARATOR '", "'),'"]') As arrdate FROM table1;
您打算在这里将数据转换为类似JSON的字符串。当然,您可以调用JSON.parse
或eval
并对此结果赋值,但我推荐一种更优雅的方式:
SELECT GROUP_CONCAT(phdate SEPARATOR ',') As dates FROM table1;
上面将包含一个日期用逗号分隔的字符串。假设您将其放入名为myDates的JS变量中,您只需调用:
myDates.split(",")
let myDates = '2021-01-13,2021-02-02,2021-03-04'; //results from db
console.log(myDates.split(','));
相关文章