【问题标题】:I have a date property in javascript here i need the expired date should be shown in red color?我在javascript中有一个日期属性,我需要过期日期应该以红色显示?
【发布时间】:2018-09-09 04:37:13
【问题描述】:

我的 html 中有 4 个不同的日期,过期日期 END MAR 20 应该是红色而不是绿色,下一个日期应该是绿色,即 END ARP 29,所有其他之前的日期应该是红色,我已经实现了截止日期过滤,但我需要过期日期应该是红色的

var date = $(".grid-item").map(function() {
  return $(this).text().trim()
}).get().sort(function(a, b) {
  var f = function(date) {
    var m, d, y;

    if (date.startsWith("END")) {
      date = date.split(" ");
      var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
      m = months.indexOf(date[1]) + 1;
      d = date[2];
    } else [y, m, d] = date.split("-");
    

    return [(new Date()).getFullYear(), m, d];
  }
  var t = new Date();
  return Math.abs(t.getTime() - new Date(...f(a)).getTime()) - Math.abs(t.getTime() - new Date(...f(b)).getTime());
});


$(".grid-item").addClass('red').filter(function() {
  return $(this).text().trim() === date[0];
}).removeClass('red').addClass('green');
.grid-item {
  border: 1px solid black;
  width: 100px;
  height: 50px;
}

.green {
  background-color: green;
}

.red {
  background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="grid-item">END MAY 29</div>
<div class="grid-item">END SEP 29</div>
<div class="grid-item">END MAR 20</div>
<div class="grid-item">END APR 29</div>

【问题讨论】:

  • 究竟是什么失败了?
  • 实际上在 map 函数中它将存储所有日期并返回索引 return $(this).text().trim() === date[0];对于最近的绿色日期,但我不想用绿色显示过期日期
  • @Kunalshetty 你的方法基本上是错误的。依靠文本进行数字或日期计算并不可靠、不安全且难以阅读。使用从零开始的月份值,例如 Javascript Date 对象,并将这些值存储在元素属性中。然后对这些值进行计算。示例:&lt;div class="grid-item" data-month="2" data-day="29"&gt;END MAY 29&lt;/div&gt;

标签: javascript jquery html colors


【解决方案1】:

我做了一个打印过期日期的演示。但是,您可以通过使用一些 jQuery 代码来做到这一点,但我使用的是纯 javascript,因为当需要考虑性能时,Javascript 是更快且更明显的编码选择。

	
 var current = new Date();
 var currentDate = current.getDate();
 var currentMonth = current.getMonth();
 var currentYear = current.getFullYear();

     document.getElementById("date").value = currentDate;
     document.getElementById("month").value = currentMonth+1;
     document.getElementById("year").value = currentYear;

	   function fun(){
	  	 getDays();
	    }
	
	
	    function getDays(){    			
		  var date = ((document.getElementById("date").value) == "") ? currentDate : parseInt(document.getElementById("date").value);
		  var month = ((document.getElementById("month").value) == "")?currentMonth : parseInt(document.getElementById("month").value-1);
		  var year= ((document.getElementById("year").value) == "")?currentYear : parseInt(document.getElementById("year").value);	
		  var d = new Date(year,month,date);	
		
		document.getElementById("day").innerHTML = d;
		if(((currentYear<=year )&&(currentMonth<month)) ||(currentYear<year ) || ((currentYear==year )&&(currentMonth==month)&&(currentDate<=date)) ){
			document.getElementById("day").style.color = "green";
		}
		else{
			document.getElementById("day").style.color = "red";
		}
	      }
		getDays();
  input date
<input type="number" value = ""  id="date" onchange="fun()"/>
input month<input type="number" value = ""  id="month" onchange="fun()"/>
input year<input type="number" value = ""  id="year" onchange="fun()"/>
<p id="day"></p>	

【讨论】:

  • 在上面提到的 sn-p 中,我希望 END APR 29 用绿色突出显示,而不是红色,因为它已过期
  • 是的,你是对的.. javascript 每次都是赢家。
猜你喜欢
  • 2011-02-09
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 2018-09-06
相关资源
最近更新 更多