尝试使用 JavaScript 从 HTML 元素中提取日期并将它们与今天的日期进行比较,如果它们在 30 天内更改文本颜色



我对编程/web开发完全陌生。

我想做的事情:我正在尝试编写JavaScript,它将从网页或在线电子表格中获取日期,并更改文本或单元格背景的颜色。颜色变化将基于从HTML元素或在线电子表格中提取的日期是否在今天的日期后14天或30天内。

下面是我想处理的html元素的示例。我将日期放在各种格式中,以尝试使用它们。

到目前为止,我写的Javascript之所以在这里发布,是因为我可以让元素改变颜色,但我不认为改变实际上是基于天数,我无法比较我想要的天数。

const now = new Date().toDateString();
const date1 = document.getElementById('test1').innerText;
for (let i = 0; i <= test.length; i++) {
i += test[i];
if (date1 <= now)
console.log('safe');
if (date1 >= now)
document.getElementsByClassName('test')[0].style.color = 'purple';
};
<div class='test'>
<p id="test1">February 22 2022</p>
<br>
<p id="test">17/2/2022</p>
<br>
<p id="test">17 3 2022</p>
<br>
<p id="test">17 4 2022</p>
<br>
</div>

  1. ID必须是唯一的。使用一个类,或者在我的情况下使用容器中的选择器
  2. 您的测试不是数组,而是字符串
  3. 您显示的哪些日期有效?我在代码中假设dd/mm/yyyydd mm yyyyMmm(...) dd yyyy中的任何一个

const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
const now = new Date();
document.querySelectorAll('.test p').forEach(p => {
const dString = p.textContent;
let [date, month, year] = dString.split(/[ /]/)
const textMonth = months.indexOf(date.slice(0, 3))
if (textMonth != -1) { // we found a month name
date = month
month = textMonth
} else month -= 1;
const d = new Date(year, month, date)
console.log(d, d <= now)
p.classList.toggle("safe", !isNaN(d) && d <= now)
p.classList.toggle("unknown", isNaN(d))
p.classList.toggle("unsafe", !isNaN(d) && d > now)
})
.safe {
color: green;
}
.unsafe {
color: purple;
}
.unknown {
color: red;
}
<div class='test'>
<p>February 22 2022</p>
<br>
<p>17/1/2022</p>
<br>
<p>17/2/2022</p>
<br>
<p>17 3 2022</p>
<br>
<p>17 4 2022</p>
<br>
<p>17 4 2025</p>
<br>
</div>

与其将它们转换为字符串,不如直接使用日期对象进行比较,date构造函数可以将字符串作为输入并从中生成对象。

试试这样的东西:

const now = new Date();
const dates = document.getElementsByTagName('p');
for (d of dates) {
let dateString = d.innerText;
let dateObj = new Date(dateString);
if (dateObj < now)
console.log(`${dateObj} is older`);
else
console.log(`${dateObj} is today or newer`);
};
<div class="test">
<p>February 22 2022</p>
<br>
<p>2/22/2022</p>
<br>
<p>2021 2 17</p>
<br>
</div>

编辑:谢谢你的创意abt片段!对那个功能不太了解。还发现JS不理解DD/MM/YYYY,其中MM是2或02:(

这里还更新了一些代码,并添加了其他建议和希望更易于理解的示例。

如果您使用任何单页应用程序,请安装moment.js库(npm I moment(,或者如果您使用HTML javascript,请添加moment.jsCDN

下面的代码只是您的逻辑问题的一个示例,仅

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
</head>
<body>
<div id="Reset">
<button>Check date is under 30 days</button>
</div>
<script>
$(document).ready(function () {
$("#Reset").click(function () {
/* $.get("https://jsonplaceholder.typicode.com/todos", function (data) {
console.log(data);
alert("Load was performed.");
}) */
let curretDate = new Date();
let dateToCheck = new Date("01/12/2022");
let date_of_30_subtract = moment(curretDate).subtract(30, 'days');

console.log(moment(dateToCheck).isBetween(date_of_30_subtract,curretDate ))
});
});
</script>
</body>
</html>

您可以设置在哪个日期之前必须检查14或30天。Thant会减去那些日子,然后得到减去后的日期。

相关内容

  • 没有找到相关文章

最新更新