2016-05-21 6 views
1

私はこのような日付のリストを持っています:日付のリストをjavascriptの範囲に圧縮するには?

1994年8月31日1994年12月6日1994年12月7日1994年12月8日1997年2月4日1997年2月5日1997年2月6日1997年2月7日1997年2月7日1997年2月8日、1997年2月9日、1997年2月9日、1997年2月11日、1997年2月13日、1997年2月13日、1997年2月14日、1997年2月15日、1997年2月16日、1997年2月17日、 1997年2月、1997年2月、1997年2月、1997年2月、1997年2月、1997年2月、1997年2月24日、1997年2月26日、1997年2月27日、1997年2月27日、1997年2月28日、1997年6月17日

もっと読めるものこのようなユーザー:

1994年8月2日、1994年10月31日、6日 - 1994年12月8日、4日、1997年2月28日および1997年6月17日

日付はすでにepochsecondsでjavascript配列に格納されています。私はこれをどこから始めるべきか分かりません。私はすでに役立つ場合は、moment.jsを使用しています。

アイデア?

+0

のために動作します私はあなたが最初のグループの各月の日付が最も低い取得すべきだと思うし、その月の最高の日付とあなたが望むように表示 – Thorin

+0

あなたは実際のリストは何ですか?あなたは文字列のリストを表示していますが、それは "epochseconds"にあると言います。 [Unix Timestamps](https://en.wikipedia.org/wiki/Unix_time)の配列を持っているということですか?その場合は、UTCの日付が現地の日付と同じでない可能性があり、現地の日付が変更される可能性があるため、[タイムゾーン](http://stackoverflow.com/questions/tagged/timezone)も考慮する必要がありますどのタイムゾーンを表示していますか?結果を表示している人の*ローカルタイムゾーン*に表示しますか? –

+0

また、StackOverflowはあなたの要件をリストし、実際の解決策を期待する場所ではありません。質問と回答のサイトです。最高の質問と回答は、あなただけでなく、多くの人が再利用できる質問と回答です。より便利な方法で質問し、既に試したコードを表示してください。まだ何も試していないのであれば、あなたは質問をするのに十分な研究をしておらず、おそらく下降してしまうでしょう。ヘルプセンターで[質問する](http://stackoverflow.com/help/asking)をお読みください。 –

答えて

1

あなたはこのように試すことができます: これはそれを行うための最善の方法はありませんが、それはあなた

var dates = ["2nd August 1994", "31st October 1994", "6th December 1994", "7th December 1994", "8th December 1994", "4th February 1997", "5th February 1997", "6th February 1997", "7th February 1997", "8th February 1997", "9th February 1997", "10th February 1997", "11th February 1997", "12th February 1997", "13th February 1997", "14th February 1997", "15th February 1997", "16th February 1997", "17th February 1997", "18th February 1997", "19th February 1997", "20th February 1997", "21st February 1997", "22nd February 1997", "23rd February 1997", "24th February 1997", "25th February 1997", "26th February 1997", "27th February 1997", "28th February 1997", "17th June 1997"]; 

var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] 
getDatesInSortedOrder(dates); 
function getDatesInSortedOrder(dates){ 
    //alert($('#test').html()); 
    var new_dates = []; 
    var group_of_dates = {}; 
    $.each(dates, function(index, value) { 
    var new_val = value.split(" "); 
    var dt = new Date(new_val[2], months.indexOf(new_val[1]), new_val[0].slice(0, new_val[0].length - 2)) 
    new_dates.push(dt) 
    }); 

    $.each(new_dates, function(index, date) { 
    var day = date.getDate(), month = date.getMonth(), year = date.getFullYear(); 
    date_group = month + "_" + year 
    if(group_of_dates[date_group] == undefined){ 
     group_of_dates[date_group] = [date]; 
    } else { 
     var temp = group_of_dates[date_group]; 
     temp.push(date) 
     group_of_dates[date_group] = temp; 
    } 
    }); 
    var sorted_dates = {}; 

    for (var key in group_of_dates) { 
    sorted_dates[key] = sortDate(group_of_dates[key]) 
    } 

    console.log(sorted_dates) 
    var finalArray = []; 
    for (var key in sorted_dates) { 
    var dates_array = sorted_dates[key]; 
    if (dates_array.length > 1){ 
     var readableDate = dates_array[0].getDate() + "-" + dates_array[dates_array.length - 1].getDate() + " " + months[dates_array[0].getMonth()] + " " + dates_array[0].getFullYear(); 
     finalArray.push(readableDate) 
    } else { 
     var readableDate = dates_array[0].getDate() + " " + months[dates_array[0].getMonth()] +" " + dates_array[0].getFullYear(); 
     finalArray.push(readableDate) 
    } 
    } 

    alert(finalArray.join(", ")) 
} 


function sortDate(dates){ 
    new_dates = dates.sort(function(a,b){ 
     if (a > b) return 1; 
     if (a < b) return -1; 
     return 0; 
    }); 
    return new_dates; 
} 

Jsfiddel

+0

これは素晴らしいですね!私はちょうどそれが実際にどのように動作するかを考えようとしています。私はその後、日付にst/nd/rd/thを追加するだけです。 – user1464409

0

コードに変換できるアイディアがあります。 2つの変数startDateendDateはまだ値を割り当てていません。最初の日付をstartDateendDateに入れてください。 2番目の日付から、現在の日付とendDateの間の日数の差を取得します。差が1の場合は、現在の値をendDateに格納します。あなたが1日以上の差に達するまでこれを続けます。その瞬間に、startDateendDateの値を出力し、それらを再度定義しないでください。あなたがすべての日付で終わるまでこれを行います。