2016-07-28 4 views
1

Я пытаюсь получить текущую дату, а затем заказывать даты с ближайшей датой div.Показать ближайшие даты в порядке на основании текущей даты jQuery

Мне удалось получить текущую дату и отформатировать ее, но я не уверен, как сделать заказ?

Вот моя попытка, но это, кажется, не приказать их или что-нибудь

<div id="dates"> 
    <div class="date"><span>10 September 2016</span></div> 
    <div class="date"><span>22 July 2016</span></div> 
    <div class="date"><span>29 August 2016</span></div> 
    <div class="date"><span>28 July 2016</span></div> 
    <div class="date"><span>5 August 2016</span></div> 
</div> 

var current = new Date(); 
console.log(current); 

var months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 

var elems = $.makeArray($(".date")); 

var d = current.getDate(); 
var m = months[current.getMonth()]; 
var y = current.getFullYear(); 

var formattedDate = d + " " + m + " " + y; 

console.log(formattedDate); 

elems.sort(function(a, b) { 
    return formattedDate > elems.text()); 
}); 

$("#dates").html(elems); 

Благодарности

+0

Возможно, у вас есть даты в прошлом, или только будущие даты? – eltonkamami

ответ

1

Чтобы добиться того, что вам требуется, было бы гораздо легче преобразовать значения даты и сравнить с текущая дата. Оттуда вы можете sort() в .date элементы и append() их в контейнере, как это:

var now = new Date(); 
 
$(".date").sort(function(a, b) { 
 
    var aDiff = new Date($(a).text().trim()) - now; 
 
    var bDiff = new Date($(b).text().trim()) - now; 
 
    return aDiff < bDiff ? -1 : aDiff > bDiff ? 1 : 0; 
 
}).appendTo('#dates').filter(function() { 
 
    return new Date($(this).text().trim()) - now < 0; 
 
}).appendTo('#dates');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="dates"> 
 
    <div class="date"><span>10 September 2016</span></div> 
 
    <div class="date"><span>22 July 2016</span></div> 
 
    <div class="date"><span>29 August 2016</span></div> 
 
    <div class="date"><span>28 July 2016</span></div> 
 
    <div class="date"><span>5 August 2016</span></div> 
 
</div>

+0

вам нужно получить textContent каждого '.date', а затем установить html' # dates'. теперь вы пытаетесь получить доступ к 'data (" date ")'. вы изменили структуру, я вижу – eltonkamami

+0

Привет, есть ли способ сделать даты, которые прошли в конце предстоящих дат, так что 28 июля, 5 августа, 29 сентября, 10 сентября, 22 июля, так как мне все еще нужно поддерживать прошлые даты, но просто имейте их в конце. – iyuyguyg

+0

@eltonkamami Я использовал код из скрипта OPs, который отличается от кода в самом вопросе. Ответ обновлен. –

0

ближайшую дату на основе текущей даты

var element = $.makeArray($(".date")); 
 
var array = []; 
 
var current = new Date(); 
 

 
element.sort(function(a,b){ 
 
    var c = new Date($(a).text()); 
 
    var d = new Date($(b).text()); 
 
    
 
    return c-d; 
 
}); 
 
for(var i in element){ 
 
    var d = new Date($(element[i]).text()); 
 
    if(d >= current){ 
 
     $("#sorted").append(element[i]) 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="dates"> 
 
    <div id="10 September 2016" class="date"><span>10 September 2016</span></div> 
 
    <div id="22 July 2016" class="date"><span>22 July 2016</span></div> 
 
    <div id="29 August 2016" class="date"><span>29 August 2016</span></div> 
 
    <div id="28 July 2016" class="date"><span>28 July 2016</span></div> 
 
    <div id="5 August 2016" class="date"><span>5 August 2016</span></div> 
 
</div> 
 
<h1>after sort</h1> 
 
<div id="sorted"></div>

Смежные вопросы