【问题标题】:Convert 'Month and Year' string into Date object using JS and Jquery使用 JS 和 Jquery 将“月和年”字符串转换为日期对象
【发布时间】:2012-06-10 20:31:56
【问题描述】:

我有两个数组(我用 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(),然后进行计算以获取经过的时间,然后使用类似这样的方法将其截断为月份和年份:

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. 如何识别当前元素的姊妹元素,以避免使用双嵌套循环? (也会在不同的问题中提出这个问题,因为它涉及不同的主题)

感谢您帮助我,因为我正在尝试制作具有可选属性的交互式简历,并且我包含了一些数据,因此我不必向冷电话的招聘人员回答所有基本信息。

【问题讨论】:

    标签: javascript jquery date elapsed


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2012-09-07
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 2023-03-09
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多