Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-如果日期时间已过期,则显示浅红色_Javascript_Jquery - Fatal编程技术网

Javascript-如果日期时间已过期,则显示浅红色

Javascript-如果日期时间已过期,则显示浅红色,javascript,jquery,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())

大家好,我相信这对你们很多人来说可能是个简单的问题。我在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');
        }
    }
});
$('#时间表tr td')。每个(函数(){
var dtTd=新日期($(this.html());
var dtNew=新日期();
//15分钟等于90万毫秒
//getTime()文档-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime
if(dtTd.getTime()-dtNew.getTime()<900000&&dtNewdtTd){
$(this.parent('tr').addClass('old');
}
}
});

日期是个棘手的问题

我相信您的日期被解析为“美国格式”,例如MM/dd/yyyy

因此,越来越多的事情变红了

有关工作示例,请参见,但下面复制了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');
  }
});

正如@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]);
这将交换变量中的月和日,然后再将其解析为日期

编辑: 我知道这个问题已经解决了,但我知道我的代码有点低效,而且比必须的要长,所以我不得不尝试改进它。我设法把它缩短了很多,我有一种感觉,这将大大提高性能

var dtSt = $(this).html().split("/");
var dtTd = new Date([dtSt[1], dtSt[0], dtSt[2]].join("/"));

好了,伙计们,我成功了。我必须将IronFlare的部分代码和rich.okelly的代码结合起来,才能让它按我需要的方式工作。非常感谢你们


我建议使用一个日期解析器库,比如momentjs。。。否则会有多个问题。。。。另外,根据当地时间给元素上色也很棘手,因为你不能总是依靠它来纠正我可能是错的,但是你的小提琴看起来对我很有用。当我在TD中更改日期和时间时,15分钟内为橙色,过期为红色。如果您希望实时更新,您需要添加一个时间,即使他在问题中写入示例日期的方式(“23/04/2015 9:23 PM”),似乎他使用的是DD/MM/YYYY格式。但是,代码将其读取为MM/DD/YYYY格式。如果使用后一种格式,它可以正常工作,但如果使用前一种格式,则无法正常工作。奇怪的是,我现在更新了fiddle链接,使用日期格式为2015年4月23日9:23 PM,这正是我所需要的。你知道吗,我刚刚意识到,我把所有人都和fiddle代码混淆了,代码本身会在15分钟即将到期时突出显示TD。我需要的是当它过期30分钟时变成橙色,当它过期1小时时变成红色。看起来rich.okelly有我需要的代码,但需要将其与IronFlare的代码混合以转换我的日期。感谢Iron Flare对我的日期转换问题的帮助。@Daniellison我最初在答案中输入的更改月份和日期的方法效率很低。我用我在答案底部贴出的不同方法将每行的时间缩短了2到5毫秒。(新代码也较短,这是另一个虽然不太明显的优点)我建议使用此新代码而不是前一个。感谢Rich,这是我代码所需的逻辑,但只是错过了日期2015年4月23日9:23 PM的转换。我使用了IronFlare的代码。谢谢
$('#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');
    }
});