59176
下記のコードを実行すると、10月、11月、12月のセレクトボックスの表示が010月、011月、012月になってしまうのですが、0を無くす書き方を教えて頂きたいです。

* * *

**HTML**

```

    <input name="textYear"> 年
      <select name="selectMonth"></select> 月
    
```

**Javascript**

```

    $(function(){
        $('input[name="textYear"]').on('change keyup',function(){
            $('select[name="selectMonth"] option').remove();
            $('select[name="selectMonth"]').append($("<option></option>"));
    
            if($(this).val() != ""){
                for(i=4;i<=15;i++){
                    let m = (i<13)?i:(i-12);
                    m =('0' + m).slice(-length);
                    let y = (i<13)?$(this).val():parseInt($(this).val())+1;
    
                    let op =$("<option></option>",{
                        value:y+m,
                        html:y+"年"+m+"月"
    
                    });
                    $('select[name="selectMonth"]').append(op);
                }
            }
        });
    });
    
```

最後にこのコードですが、４は４月から始まるから４で１５はなぜ１５という数字が出てきたのか教えて頂きたいです。あと、１３とー１２の意味も教えて頂きたいです。  
for(i=4;i<=15;i++){  
let m = (i<13)?i:(i-12);
CC BY-SA 4.0
2019-09-20T05:17:56.057
59175
2019-09-26T03:08:03.917
2019-09-26T01:06:57.300
3060
35696
question
javascript
カレンダーの月表示で数字を二桁に揃えたい
```

    m=('00' + m).slice(-2);
    
```

とすれば、とりあえず表示されるようになります。
CC BY-SA 4.0
2019-09-20T05:48:02.693
59176
2019-09-20T05:48:02.693
19858
59175
answer
slice利用しない

```

    let m = (i<13)?'0'+i.toString():(i-12).toString();
    //m =('0' + m).slice(-length);
    
```

または、slice利用時

```

    let m = (i<13)?i:(i-12);
    m =('0' + m).slice(-2);
    
```
CC BY-SA 4.0
2019-09-20T06:08:53.623
59177
2019-09-20T06:32:19.853
2019-09-20T06:32:19.853
3060
35385
59175
answer
`padStart()` を使うと簡潔にできます。

```

    m = m.toString().padStart(2, '0');
    
```

また、4から15のループになっているのは、4月から翌年3月(12 + 3)までの月を生成したいからと思われます。`(i < 13) ? i : (i -
12)`は、13から15の値を1から3に直しています。
CC BY-SA 4.0
2019-09-25T09:04:29.777
59263
2019-09-26T03:08:03.917
2019-09-26T03:08:03.917
3475
3475
59175
answer