- ベストアンサー
プルダウンメニュー日付生成で月の変わり目について
初心者です。 質問集をいろいろ探して日付生成できたのですが月末、月初がうまくいきません。 イヌでも・・やトホホ・・など探してますがマッチする情報が見つからないのでわかったら教えて下さい。 100にち分を表示するようにしてます。 このソースは短くてシンプルなので気に入ってます、 ======================================== <SCRIPT type="text/javascript"> window.onload = function() { var d, str, elm = document.getElementById('gdate'); var day = new Date(); day.setMilliseconds(24*60*60*1000); for (d=1; d<100; d++) { str = (day.getMonth() + 1) + '/' + (day.getDate() -1); elm.options[d] = new Option(str, str); day.setMilliseconds(24*60*60*1000); } } </SCRIPT><SELECT name="HIDUKE" id="gdate"> <OPTION>日付選択</OPTION> </SELECT> ======================================== あまり複雑にしないで解決する方法ありますか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
元のスクリプトがなぜ『 day.getDate() -1 』にしているのか理由が思い当たりませんが… 普通に暦の日付を表示したいのなら、-1をしなければ良いだけでは? >100にち分を表示するようにしてます。 現状だと99日分ではないかと思いますが… <script type="text/javascript"> window.onload = function() { var str, d = 1, day = new Date(); var elm = document.getElementById('gdate'); while ( d < 101 ) { str = (day.getMonth() + 1) + '/' + day.getDate(); elm.options[d++] = new Option(str, str); day.setHours(24); } } </script> 1行減ったのと、ほかにも少し短くなったかも…
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>day.setMilliseconds(24*60*60*1000); としてるのは日付をインクリメントしてたいのでしょう・・・ 理解しないままこういう姑息なことをすると結局手動で デクリメントが必要になって、日付が0になったり月末日が 拾えなかったりします。 素直に日付のインクリメントは今日の日付に1たしましょう <SCRIPT> window.onload = function() { var d, str, elm = document.getElementById('gdate'); var day = new Date(); for (d=1; d<100; d++) { str = (day.getMonth() + 1).toString() + '/' + day.getDate().toString(); var op=document.createElement("option"); op.setAttribute("value",str); op.appendChild(document.createTextNode(str)); elm.appendChild(op); day.setDate(day.getDate()+1); } } </SCRIPT> <SELECT name="HIDUKE" id="gdate"> <OPTION>日付選択</OPTION> </SELECT>
本当に小さなミスです。 下記の通り1行修正して下さい。 ------------------------------- str = (day.getMonth() + 1) + '/' + (day.getDate() -1); ↓ str = (day.getMonth() + 1) + '/' + day.getDate();
お礼
ありがとうございました。 -1 を付けたのは今日の日付が出ないので荒業を使った事が原因だったんですね。
お礼
非常に分かりやすくシンプルですごく良いです! ありがとうございました。