Преобразуйте строку "Месяц и год" в объект Date, используя JS и Jquery.

У меня есть два массива (я сделал их из jQuery из таблицы), первый - дата окончания, а второй - дата начала. Элементы являются строками:

["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 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. Как бы определить идентифицирующие элементы текущего элемента, чтобы избежать использования двойного вложенного цикла? (также задам это в другом вопросе, поскольку он затрагивает другую тему)

Спасибо за помощь, поскольку я пытаюсь сделать интерактивное резюме с выбираемыми атрибутами, и я включаю некоторые данные, поэтому мне не нужно отвечать на всю основную информацию рекрутерам, которые звонят по телефону.

1 ответ

Решение

На самом деле, все, что вам нужно, это карта от названий месяцев до цифр. Вы можете построить такой как это:

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. Затем вы можете превратить одну из ваших строк в номер месяца и год. Если затем вы превратите его в абсолютное число месяцев (год * 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.

Другие вопросы по тегам