根据当前时间选择最接近的时间

时间:2016-01-04 08:33:27

标签: javascript jquery

我有一整天的时间列表,希望根据它接近当前时间选择时间。



overlaysTooltips.get(i).getAttribute("id")
or
overlaysTooltips.get(i).getAttribute("class")
or
overlaysTooltips.get(i).getAttribute("name")

now = 11:18; 
$(function(){
	
})

.selected{
  font-weight:bold;
}




^列表上的选定时间现在应该切换到11:30,因为它不再接近11:00。

我被困在某个地方,我知道我应该得到不同的时间并除以2,但不知道如何继续。

4 个答案:

答案 0 :(得分:1)

尝试使用.filter(0)String.prototype.replace(),使用.data()存储li文字的24小时呈现,投放data-*属性和nowNumber.eq(0)选择第一场比赛,.siblings()

var now = "1116";
$(function() {
  $("li").filter(function() {
    return +$(this).data().t > +(now) && +$(".selected").data().t
  }).eq(0).addClass("selected").siblings().removeClass("selected")
})
.selected {
  font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<li class="selected" data-t="1100">11:00</li>
<li data-t="1130">11:30</li>
<li data-t="1200">12:00</li>
<li data-t="1230">12:30</li>
<li data-t="1300">1:00</li>
<li data-t="1330">1:30</li>
<li data-t="1430">2:30</li>
<li data-t="1530">3:00</li>

jsfiddle https://jsfiddle.net/ptfa9a04/9/

答案 1 :(得分:1)

继承人的另一种方式

&#13;
&#13;
var now = "12:18";

$(function() {
    var els    = $('ul li'),
	times  = els.map(function() { return $(this).text() }).get(),
    	diff   = Infinity, i = 0
    
    times.forEach(function(time, index) {
    	var a1 = now.split(':');
    	var d1 = new Date(2015, 1, 1, a1[0], a1[1]);
        var a2 = time.split(':');
        var d2 = new Date(2015, 1, 1, a2[0], a2[1]);
        var d  = Math.abs(d1-d2);
        
        if ( d < diff ) {
        	diff = d; i = index;
        }
    });
    
    els.eq(i).addClass('selected').siblings().removeClass('selected')
});
&#13;
.selected {
    font-weight: bold;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
    <li>11:00</li>
    <li>11:30</li>
    <li>12:00</li>
    <li>12:30</li>
    <li>1:00</li>
    <li>1:30</li>
    <li>2:30</li>
    <li>3:00</li>
</ul>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

检查此fiddle

function findClosestTimeInList( $listULObj, now )
{
  now = now.split( ":" ).join("");
  var arr = [];
  $listULObj.find( "li" ).each( function(){

     var value = $( this ).html().split( ":" ).join("");
     arr.push( value );
     $( this ).attr( "data-val", value );

  } );

  $listULObj.find( "li[data-val='" + closestInArray(arr, now) + "']" ).addClass( "selected" ).siblings().removeClass( "selected" );

  function closestInArray(arr, goal)
  {
    return closest = arr.reduce(function (prev, curr) {
      return (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);
    });
  }
}

findClosestTimeInList( $( "ul" ), "11:18" );

同样你也可以尝试其他输入

findClosestTimeInList( $( "ul" ), "12:18" );

这将从列表中选择12:30。

答案 3 :(得分:0)

如果它已整理并以24小时格式作为您的评论。你可以试试,

var now = '04:01'; 
$(function(){
  var a = now.split(':');
  var date1 = new Date();
  var date2 = new Date();
  date1.setHours(a[0], a[1], 0, 0, 0);
  $("li").removeClass('selected').each(function(){
    var b = $(this).text().split(':');
    date2.setHours(b[0], b[1], 0, 0, 0);
    if (date2 >= date1) {
      $(this).addClass('selected');
      return false;
    }
  });
})

FIDDLE

相关问题