【问题标题】:List month name and year for the last 6 months列出过去 6 个月的月份名称和年份
【发布时间】:2015-01-08 16:07:56
【问题描述】:

我在年中的时候运行良好,但现在我们已经进入新的一年,我的代码中断了。我需要获取前 6 个月的月份名称和年份。

我修改后的代码:

var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();

var i = 0;
do {
    $("#pickWinners_month").append($("<option />").val((month > 8 ? "" : "0") + month + "/01/" + year).html(monthNames[month - 1] + " " + year));
    if (month == 0) {
        month = 11;
        year--;
    } else {
        month--;
    }

    i++;
} while (i < 6);

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 在 JavaScript 中,月份的索引从 0 到 11
  • 好的,我明白了。如果我改成这个,我现在可以正确获得大部分名称,但 12 月显示为未定义。

标签: javascript jquery date


【解决方案1】:
const today = new Date();
let lastSixMonths = []

for (var i = 6; i > 0; i -= 1) {
    const date = new Date(today.getFullYear(), today.getMonth() - i, 1);
    lastSixMonths.push(moment(date).format("MMMM YYYY"))
}

return lastSixMonths.reverse() // Result

【讨论】:

  • 您的答案被标记为低质量。如果你的逻辑完全成立,你能否也给出答案中的代码。
  • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。解释代码时,您也可能会得到用户的积极反馈/赞成。
  • 社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(参见here)。
【解决方案2】:

你可以这样做

var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

var today = new Date();
var d;
var month;

for(var i = 6; i > 0; i -= 1) {
  d = new Date(today.getFullYear(), today.getMonth() - i, 1);
  month = monthNames[d.getMonth()];
  console.log(month);
}

Run code

【讨论】:

    【解决方案3】:

    我将稍微扩展一下@zynetro 提供的答案,将年份也包括在内。

    var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    
    var today = new Date();
    var d;
    var month;
    var year;
    
    for(var i = 6; i > 0; i -= 1) {
      d = new Date(today.getFullYear(), today.getMonth() - i, 1);
      month = monthNames[d.getMonth()];
      year = d.getFullYear();
      console.log(month);
      console.log(year);
    }
    

    这是一个fiddle

    【讨论】:

      【解决方案4】:
       var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
      
      var today = new Date();
      var year = today.getFullYear();
      var month = today.getMonth();
      var i = 0;
      
      do {
      
          if (month < 0) {
              month = 11;
              year--;
          }
      
          $("#pickWinners_month").append($("<option />").val((month > 9 ? "" : "0") + month + "/01/" + year).html(monthNames[month] + " " + year));
      
          month--;
          i++;
      } while (i < 6);
      

      这是一个有效的Sample

      【讨论】:

        【解决方案5】:

        正如 zaynetro 所说,您的月份索引错误:

        • monthNames[月]
        • 月 == 0
        • 月 = 11

        这里是完整的代码:

        var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
        
        var today = new Date();
        var year = today.getFullYear();
        var month = today.getMonth();
        
        var i = 0;
        do {
            $("#pickWinners_month").append($("<option />").val((month > 9 ? "" : "0") + month + "/01/" + year).html(monthNames[month] + " " + year));
            if (month == 0) {
                month = 11;
                year--;
            } else {
                month--;
            }
        
            i++;
        } while (i < 6);
        

        【讨论】:

        • 酷,这给了我准确的值,但我不想要当前月份,所以当今天是一月时,显示去年的七月到十二月。
        • 所以只需将月份的初始值减一
        • @zaynetro 你能详细说明“如果我不想要当前月份”的答案吗?
        【解决方案6】:

        你可以这样做:

        $date ='2015-01-01'
        for (int i=0;i<6; i++){
            $datemonthBefore = date('Y-m-d',strtotime('-i months', strtotime($date)));
            var month = datemonthBefore.getMonth();
        }
        

        【讨论】:

          【解决方案7】:

          看来我明白了。从今天的日期减去一个月,然后将其用作新的开始日期。

          var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
          
          var lastMonth = new Date();
          lastMonth.setMonth(lastMonth.getMonth() - 1);
          var year = lastMonth.getFullYear();
          var month = lastMonth.getMonth();
          
          var i = 0;
          do {
              $("#pickWinners_month").append($("<option />").val((month > 9 ? "" : "0") + month + "/01/" + year).html(monthNames[month] + " " + year));
              if (month == 0) {
                  month = 11;
                  year--;
              } else {
                  month--;
              }
          
              i++;
          } while (i < 6);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多