1

2つの配列があり(テーブルのjQueryから作成しました)、1つ目は終了日、2つ目は開始日です。要素は文字列です:

["June, 2012", "June, 2012", "August, 2011", "April, 2013", "August, 2010", "August, 2010", "April, 2013", "April, 2012", "April, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012", "June, 2012"]

["November, 2011", "April, 2012", "May, 2008", "May, 2007", "November, 2007", "May, 2007", "June, 2006", "June, 2007", "April, 2006", "January, 2008", "April, 2001", "April, 2001", "April, 2006", "April, 1998", "April, 1998", "September, 2008", "August, 2010", "August, 2009", "August, 2010", "August, 2009", "August, 2010", "August, 2010", "August, 2010", "January, 1997", "January, 1997", "January, 2010", "January, 2007", "April, 2010"]

インデックスの各セット間の経過時間を取得しようとしています。date()これらの文字列を日付オブジェクトに変換し、計算を行って経過時間を取得し、次のようなものを使用して月と年だけに切り捨てる必要があると想定します。

function convertDate(passedDate) {
    var m = new Array(7);
    var y = passedDate.getFullYear();
    m[0] = "January";
    m[1] = "February";
    m[2] = "March";
    m[3] = "April";
    m[4] = "May";
    m[5] = "June";
    m[6] = "July";
    m[7] = "August";
    m[8] = "September";
    m[9] = "October";
    m[10] = "November";
    m[11] = "December";
    return m[passedDate.getMonth()] + "months and " + y + " years;  
};

ここにフィドルがあり、ここに私の質問があります:

  1. 曜日や時間に興味がないので、日付オブジェクトに変更せずにこれを行う方法はありますか?

  2. 経過日数式の日付に変換してから文字列に戻す以外に、提案する別のアプローチはありますか?

  3. 二重ネストループの使用を回避できるように、現在の要素の姉妹要素をどのように識別しますか?(これは別のトピックに対応しているため、別の質問でも質問します)

選択可能な属性を使用してインタラクティブな履歴書を作成しようとしているので、助けてくれてありがとう。また、いくつかのデータを含めているので、コールドコールするリクルーターにすべての基本情報に答える必要はありません。

4

1 に答える 1

7

本当に必要なのは、月の名前から数字への地図だけです。次のように作成できます。

var monthNames = [ "January",   "February", "March",    "April",
                   "May",       "June",     "July",     "August",
                   "September", "October",  "November", "December" ]
var monthNumber = {}
for (var i=0; i<monthNames.length; ++i) {
    monthNumber[monthNames[i]] = i;
}

これで、たとえばmonthNumber['October']== 9になります。次に、文字列の1つを月の数と年に変換できます。次に、それを絶対月数(年* 12 +月)に変換すると、減算するだけで経過月数を取得できます。

function stringToMonthNumber(monthYear) {
    var parts = monthYear.split(/\s*,\s*/)
    var month = monthNumber[parts[0]]
    var year = parts[1] - 1
    return year * 12 + month
}

function elapsedMonths(startString, endString) {
    return stringToMonthNumber(endString) - stringToMonthNumber(startString)
}

次にこれ:

elapsedMonths("November, 2011", "June, 2012")

7を返します。

于 2012-06-10T21:00:17.797 に答える