Преобразуйте строку "Месяц и год" в объект 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 ответ
На самом деле, все, что вам нужно, это карта от названий месяцев до цифр. Вы можете построить такой как это:
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.