2012-06-10 25 views
1

我有两个数组(我使用jQuery从表中创建它们),第一个是结束日期,第二个是开始日期。这些元素都是字符串:使用JS和JQuery将'Month和Year'字符串转换为Date对象

["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; 
}; 

这里是fiddle这里是我的问题:

  1. 反正有没有做到这一点,而不将其更改为约会对象,因为我不感兴趣的日子或时间?

  2. 是否有另一种方法,你会建议,而不是尝试将日期转换为经过日期数学公式,然后转换回字符串?

  3. 我将如何识别当前元素的姐妹元素,以便我可以避免使用双重嵌套循环? (也将在不同的问题,问这个,因为它解决了一个不同的主题)

谢谢你帮我,我试图与可选属性的互动简历,我包括一些数据,以便我不需要回答所有冷酷呼叫的招聘人员的基本信息。

回答

6

真的,所有你需要的是从月份名称到数字的地图。你可以建立一个这样的:

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.

相关问题