- ベストアンサー
JavaScriptで100日後の日時を表示させる方法
- JavaScriptで現在日時から100日後の日時を求め、表示させる方法について説明します。
- 日付を取得するためには、Dateオブジェクトを使用します。
- Dateオブジェクトのメソッドを使って、現在日時から100日後の日時を計算し、表示させることができます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
まったく同じ方法ですが… >極力、単純な方法が理想です。 とのことなので、日にちを足すのが簡単では? var day = new Date(); day.setDate(day.getDate() + 100); alert(day.toLocaleString());
その他の回答 (6)
- steel_gray
- ベストアンサー率66% (1052/1578)
>表示させる方法が分かりません。 どこに表示したいのだろう? alertではないって事だよね?? 幾つかみつくろって。 <head> <style type="text/css"> p{border:solid thin red;} </style> <script type="text/javascript"> function sample() { var str = new Date().toLocaleString();//100日後に関しては他の方の回答で。 //特定ノードにテキストノードを作って追加する document.getElementById('ABC').appendChild( document.createTextNode(str) ); //特定ノード配下の最初のテキストノードを書き換える document.getElementById('DEF').firstChild.nodeValue =str; //input textの値を書き換える document.getElementById('GHI').value =str; } </script> </head> <body> <p id="ABC"></p> <p id="DEF">aaa</p> <p><input type="text" id="GHI" value="bbb" /></p> <p><input type="button" value="実行" onclick="sample()"></p> </body>
お礼
表示する方法までご教授いただきありがとうございました。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
誤字修正です。 var day=new Date(); //100日 x 24時間 x 60分 x 60秒 x 1000ミリ秒 day.setTime(day.getTime() + (100 * 24 * 60 * 60 * 1000)); 空気読めてなくて申し訳ないです。 もっと複雑な物を作るべきでした。
お礼
ありがとうございます。 この方法でもうまくいきました。
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
var day=new Date(); //100日 x 24時間 x 60分 x 60秒 x 1000ミリ秒 day.setTime(d.getTime() + (100 * 24 * 60 * 60 * 1000));
- Chaire
- ベストアンサー率60% (79/130)
getYear() メソッドが 2000 年問題を持っていたことにより、getFullYear() メソッドが導入されたのは JavaScript 1.3(NN 4.06)、JScript 3.0(IE 4.0)、そして ECMAScript(2000 年の第 3 版で getYear() を削除し歴史的補遺としてのみ残した)です。現時点で getFullYear() に対応していないスクリプトエンジンはないので、これからの制作者は getYear() を使わないで下さい。 ※有名なサイトが未だにこれを記述しているため、真似をしてしまう人が後を絶たないのですが、少なくとも、2000 年以降に書かれた JavaScript 関連文書で、escape、unescape、Date.prototype.getYear、Date.prototype.setYear、Date.prototype.toGMTString、String.prototype.substr あたりを無批判に用いているものは、不用意と言わざるをえません。もう 2010 年も半ばですよ。 また、月末日を得るには翌月の 0 日をセットするだけです。new Date(2010, 2, 0).getDate() は 2010 年 2 月の最終日、28 を返します。閏年の心配も要りません。この挙動は ECMAScript 規定(15.9 節)で保証されています。 同じ理由で、今(var now = new Date;)から 100 日後を得るには、 now.setDate(now.getDate() + 100); 今から 100 日前を得るには now.setDate(now.getDate() - 100); 今から 300 時間後を得るには now.setHours(now.getHours() + 300); 簡単でしょ? ※厳密には、Date の内部は 1970-01-01T00:00:00.000 からのミリ秒(時間値)で管理されています。set*** メソッドに与えられた引数は適切にミリ秒に変換されて、時間値と合わされます。get*** が呼ばれたとき、時間値は適切な値に変換されます。
お礼
ありがとうございました。 本質問は、そもそも、本に乗っていたgetDate、setDateの説明を私が勘違いして受け取ったために、できないものと勝手に解釈して質問を立てたものでした。 Chaireさんのご回答が、勘違いに気付くきっかけとなりました。本当にありがとうございました。 getYearが推奨されてないことは知りませんでした。確かに手元の本にもそう書いてありますね… お教えいただきありがとうございました。
- zeff
- ベストアンサー率69% (137/198)
いちおう頑張って作ってみたんですが、いかがでしょうか。 何日後でも年をまたいでもOKだと思うのですが。 長かったり不手際があったらごめんなさい。 <html lang="ja"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>title</title> <script type="text/javascript"> <!-- function func(){ //現在年月日時刻 var date = new Date(); var yy = date.getYear(); if ( yy < 2000 ){ yy += 1900; } var mm = date.getMonth() + 1; var dd = date.getDate(); var h = date.getHours(); if( h < 10 ){ h = '0' + h; } var m = date.getMinutes(); if( m < 10 ){ m = '0' + m; } var s = date.getSeconds(); if( s < 10 ){ s = '0' + s; } var cnt = 0,x = 100; //今月 for( var i = dd; i <= getDaysInMonth( yy, mm ); i++ ){ if( cnt == x ){ showMsg( x, yy, mm, dd, h, m, s ); break; }else{ dd++;cnt++; } } //次月以降 mm++; dd = 1; while( cnt < x ){ dd++; cnt++; if( dd > getDaysInMonth( yy, mm ) ){ mm++; dd = 1; } if( mm > 12 ){ yy++; mm = 1; } } showMsg( x, yy, mm, dd, h, m, s ); } //月の日数を返す関数 function getDaysInMonth(iYear, iMonth) { var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if ( ((iYear % 4 == 0) && (iYear % 100 != 0)) || (iYear % 400 == 0) ) { daysInMonth[1] = 29; } return daysInMonth[iMonth - 1]; } //x日後をalertする関数 function showMsg(x, yy, mm, dd, h, m, s ){ if( mm < 10) mm = '0' + mm; if( dd < 10) dd = '0' + dd; alert( x + '日後は' + yy + '/' + mm + '/' + dd + '/' + h + ':' + m + ':' + s ); } window.onload = function(){ func(); } //--> </script> </head> <body> </body> </html>
お礼
労作、ありがとうございました。 簡単な方法で実装することができました。
補足
あ…ありがとうございます。 一応、うまく動作することが確認できました。 さぞかし大変だったのでは…? ただ、極力簡単な方法を求めていたので、これではちょっとあまりにもソースコードが長すぎかと…。 逆に、こんなに大変なコードを書かないと実現できないことなんでしょうか? JavaScriptについては最近勉強し始めたばかりですが、こんな基本的なことが2~3行のコードで実現できないとは………こんなにも不便な言語なのですか…? クッキーの有効期限を設定したりとか、利用価値が多そうなのに…。 そういう場合、みなさんどうやっているのでしょう? すみません、せっかくの労作に愚痴をこぼしてしまって…
- yyr446
- ベストアンサー率65% (870/1330)
100日後は 100×24×3600×1000=8640000000ミリ秒 です。(オーバーフローしないかなあ...) day.getMilliseconds() に8640000000を加算した値をsetすればいいんじゃない。 var day = new Date(); var datestr = day.toLocaleString(); var post_day= new Date(); post_day.setMilliseconds(day.getMilliseconds()); var post_datestr = post_day.toLocaleString(); alert(datestr); alert(post_datestr);
お礼
この方法でもうまくいきました。 勝手にできないと思い込んでました。失礼しました…
補足
getMilliseconds、setMillisecondsの範囲は0~999です。 なのでこの方法では実現できません……
お礼
ありがとうございました。 ご教授いただいた方法で実現できました。 手元の本に「getDate、setDateの範囲は1~31」と明記してあったため、それを真に受けてそれ以外の範囲の数値は設定できないものだと勝手に思い込んでおりました。 実施してみたところ、うまくいきました。本当に失礼しました。
補足
setDate関数の範囲は1~31までかと………