大家好,我相信这可能是一个很简单的问题。我在TD中有一个文本字段,日期为" 23/04/2015 9:23 PM"我需要那个细胞在30分钟过期时简单地变成橙色,如果60分钟过期则需要红色。
我有一个例子,说明日期是如何布局的。但是代码没有运气。 http://jsfiddle.net/s3328ffo/35/
任何人都知道我在哪里出错?
$('#timeTable tr td').each(function () {
var dtTd = new Date($(this).html());
var dtNew = new Date();
// 15 minutes is 900000 milliseconds
// getTime() doc - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime
if (dtTd.getTime() - dtNew.getTime() < 900000 && dtNew < dtTd) {
$(this).parent('tr').addClass('min15');
} else {
if (dtNew > dtTd) {
$(this).parent('tr').addClass('old');
}
}
});
答案 0 :(得分:1)
日期是棘手的野兽。
我相信您的日期正在以美国格式进行解析&#39;例如MM / dd / yyyy。
因此,更多的东西变得比它们应该是红色的。
有关工作示例,请参阅http://jsfiddle.net/mt8sf7gL/,但下面复制了js以供参考:
$('#timeTable tr td').each(function () {
var when = Date.parse($(this).text()); // This can be changed from .text() to read the value from an attribute ifyou do not wish to display the date in this format
var now = Date.now();
if (now - when > 3600000) {
$(this).parent('tr').addClass('old');
} else if (now - when > 1800000) {
$(this).parent('tr').addClass('min15');
}
});
答案 1 :(得分:1)
正如@ rich.okelly建议的那样,日期正在以MM / DD / YYYY格式进行解析。要将日期更改为DD / MM / YYYY格式,您可以执行以下操作:
var dtSt = $(this).html().split(" ");
var dtAr = dtSt[0].split("/");
var dtTd = new Date(dtAr[1] + "/" + dtAr[0] + "/" + dtAr[2] + " " + dtSt[1]);
这将在变量中将月份和日期交换为日期。
http://jsfiddle.net/IronFlare/s3328ffo/28/
编辑: 我知道这个问题已经解决了,但我知道我的代码效率有点低,而且比以前更长,所以我忍不住尝试改进它。我设法缩短了一点,我觉得这会显着提高性能。
var dtSt = $(this).html().split("/");
var dtTd = new Date([dtSt[1], dtSt[0], dtSt[2]].join("/"));
答案 2 :(得分:0)
好的伙计我让它运转起来。我不得不将IronFlare和rich.okelly代码的一部分结合起来,让它像我需要的那样工作。非常感谢你们!
http://jsfiddle.net/mt8sf7gL/7/
$('#timeTable tr td').each(function () {
var dtSt = $(this).html().split(" ");
var dtAr = dtSt[0].split("/");
var when = new Date(dtAr[1] + "/" + dtAr[0] + "/" + dtAr[2] + " " + dtSt[1]);
console.log(when);
var now = Date.now();
if (now - when > 3600000) {
$(this).parent('tr').addClass('min60');
} else if (now - when > 1800000) {
$(this).parent('tr').addClass('min30');
}
});