Javascript - 如果日期时间过期,则为红色

时间:2015-04-24 01:47:23

标签: javascript jquery

大家好,我相信这可能是一个很简单的问题。我在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');
        }
    }
});

3 个答案:

答案 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');
    }
});