2

例:今日は4日です。12月

  1. 2012年12月

  2. 2012年12月

  3. 2012年12月

タイトル(2012年12月5日)

タイトル(2012年12月7日)

  1. 2012年12月

最も近い日付は5です。12月(3.Decemberではありません)(新しいものではなく古いもの)

また、「12月5日」が複数ある場合は、クラスを最初の子のみに追加します。

HTML:

<div class="wrap">

<div class="zone" id="one">  
<div class="box">
    <footer class="time">1. December 2012</footer>
</div>


<div class="box">
    <footer class="time">1. December 2012</footer>
</div>

<div class="box">
    <footer class="time">3. December 2012</footer>
</div>


<div class="box">
    <h2>Title <span class="time">(5. December 2012)</span></h2>
</div>


<div class="box">
    <h2>Title <span class="time">(7. December 2012)</span></h2>
</div>


<div class="box">
    <footer class="time">9. December 2012</footer>
</div>

</div>

<div class="zone"  id="two">
    <!-- Same .zone#one but i will focus for .zone#one only-->
</div>

</div>


<code></code>

jQuery:

var closest = [];

$('.wrap > .zone:eq(0) .box').each(function(i) {
        var date = $(this).find(".time").html().replace("(","").split(".");
        closest.push(date[0]);
});



$("code").html(closest+"");

遊び場: http: //jsfiddle.net/WJvZb/

私は今このステップに来ていますが、最も近い日付を見つけてクラスを追加することはわかりません(例:.closestクラス)

4

4 に答える 4

1

配列を使用している限り、これが最も簡単な方法です。

var closest = [];
// Current Date
var current = new Date("04/12/2012");
// Function to get the Minimam value in Array
Array.min = function( array ){
    return Math.min.apply( Math, array );
};
// Played on your code
$('.wrap > .zone:eq(0) .box').each(function(i) {
    var date = $(this).find(".time").html().replace("(","").split(".");
    // If higher than current date
    if(current.getDay() < date[0]) {
        closest.push(date[0]);
    }
});
// Get the closest day..
$("code").html(Array.min(closest)+"");

あなたのデモで再生: http://jsfiddle.net/BerkerYuceer/WJvZb/40/

于 2012-12-04T09:23:46.973 に答える
1

これを行う最も簡単な方法は、各日時を解析し (形式によって異なります)、それらを配列にプッシュし、配列をループしてそれらの間の時間差を計算し、最小値を取得することです。moment.js などの便利なライブラリを使用して、日付の解析と計算を行うことができます。

var now = new Date();
var closest = -1; //array ndx
var times = [];
var els = [];

$('.time').each(function(i) {
    times.push(someParsingMethod($(this).text());
    els.push($(this));
});

//initial difference
var diff = times[0].getTime() - now.getTime();

//check for lowest difference greater with a target date greater than now
for(var i=0;i<times.length;i++){
   var tmpDiff = times[i].getTime() - now.getTime();
   if(times[i].getTime() > now.getTime() && tmpDiff < diff){
       closest = i;
   }
}

if(closest != -1){
    els[closest].addClass("closestClass");
}

これは疑似コードにすぎません。このタスクの本当の課題は、独自の日付形式を解析することです。

于 2012-12-04T08:26:32.790 に答える
1

日付に英語の名前を付ける必要があるため、「desember」...また、日付を反復処理して、そこから Date オブジェクトを作成すると、最も近いものを簡単に見つけることができます。

var closest = [];

$('.wrap > .zone:eq(0) .box').each(function(i) {
    var date = $(this).find(".time").html().replace("(","").replace(")","");
        closest.push(new Date(date));
});

function closestTime(days, testDate)
{
    var bestDiff = null;

    for(i = 0; i < days.length; ++i){
        currDiff = Math.abs(days[i] - testDate);
        if(currDiff < bestDiff || bestDiff == null){
            bestDate = days[i];
            bestDiff = currDiff;
        } else if (currDiff == bestDiff && days[i] > testDate) {
            bestDiff = currDiff;             
        }
    }

    return bestDate;
}

console.log(closestTime(closest,new Date()));
于 2012-12-04T08:34:29.970 に答える