• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:現在と指定の日付の年数差を効率的に表示させたいです)

現在と指定の日付の年数差を効率的に表示させる方法

このQ&Aのポイント
  • 質問者は、現在の日付と指定の日付の年数差を効率的に表示させる方法を知りたいとしています。
  • 現在の日付からPタグ内の日付を差し引いて、年数の差を求めたいとしています。しかし、現在のコードが長くなってしまっており、短くする方法があれば教えてほしいとも述べています。
  • また、質問者はコード内の以下の疑問を持っています: 1. forループの中でnew Date()を使うことは問題ないか 2. 365日で計算しているが、閏年などの影響はないか 3. コードをもっと短くすることは可能か

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

みじかいの!? alert(function(){for(var i=0,e,d,a=[],p=document.getElementsByTagName('p'),y=(new Date).getFullYear()+1;e=p[i++];)if(d=/(\d+)年/.exec(e./*@cc_on@if(1)innerText@else@*/textContent/*@end@*/))a.push(y-d[1]);return a}())

kiseki777
質問者

お礼

こんなに短くなるのですか!! 凄いですね。有難うございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

こうりつてきかどうかは、びみょう。 (できるなら、あらたなしつもんは、とじてからにしてほしい。) <!DOCTYPE html> <title>もじれつから、にちじをぬきだして、Date おぶじぇくとにして、ねんのさをかえす。</title> <body> <p>2009年11月1日2時3分</p> <p>200年111月</p> <p>1965年3月</p> <p>2002年8月</p> <p>1992年1月</p> <p>1970年10月</p> <script> if(!Array.prototype.map)Array.prototype.map=function(b,e){var c=this.length;if(typeof b!="function")throw new TypeError;for(var d=Array(c),a=0;a<c;a++)a in this&&(d[a]=b.call(e,this[a],a,this));return d}; var A =  function () {   var r = /(\d{4})年(?:(\d{1,2})月(?:(\d{1,2})日(?:(\d{1,2})時(?:(\d{1,2})分)?)?)?)?/;//秒とかは、力つきる   return function (s) {    var d = r.exec (s);    return d ? d.slice (1): d;   };  } (); var B =  function (a) {   return a ? new Date (a[0], a[1] || 0, a[2] || 1, a[3] || 0, a[4] || 0, a[5] || 0, a[6] ||0): null;  }; var C =  function (a, b) {   var c;   if (2 > arguments.length)    b = new Date;   return a ? b.getFullYear () - a.getFullYear () + 1: null;  }; alert (Array.prototype.map.call (document.getElementsByTagName ('p'), function (p) {  return C (B (A (p./*@cc_on @if(1) innerText @else@*/ textContent /*@end@*/))); }).join ('\n')); </script>

kiseki777
質問者

お礼

こちらの場合も正規表現を使うとよいのですね。 有難うございます。勉強して解読を試みます。

全文を見る
すると、全ての回答が全文表示されます。
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

こんなんとか。 http://www.ideone.com/AZdF5 まあ、Dateオブジェクトで計算してるのと大差ないですが。 ということで、質問1~3は省略。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 日付範囲指定について

    よろしくお願いします。 年、月をコンボボックスで表示させ、選択できるようにしてあります。jsの内容は以下です。 ----------------------------------------------------- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); fday(d); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } ----------------------------------------------------- これを利用して日付範囲指定(例として、2006年1月~2008年8月ような感じ)を行いたいのですが、可能でしょうか? 自分で試した方法ですと、前半(2006年1月)は表示できるのですが、後半(2008年8月)が表示できませんでした。 試したソースは以下 --------------------------------------------------- <!-- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); tyear(y); tmonth(m); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } function tyear(thisyear){ var obj = document.getElementById('tyear'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function tmonth(thismonth){ var obj = document.getElementById('tmonth'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } //--> どうかよろしくお願いします。

  • 指定した日付で画像を切り替え

    タイトルどおり…。 日付で画像を切り替えしようと思っています。 それで、ソースは下記のものです。 <!--// // function fncGraphicChangerByDate() { var i; var month; var day; var today; var maxFile = 4; var date = new Date(); var graphics_data = new Array(maxFile); var graphics_path = new Array(maxFile); if ((month = (date.getMonth() + 1)) < 10) { month = "0" + month; } else { month += ""; } if ((day = date.getDate()) < 10) { day = "0" + day; } else { day += ""; } today = month + day; graphics_data[0] = "0301"; graphics_path[0] = "images/7.jpg"; graphics_data[1] = "0601"; graphics_path[1] = "images/8.jpg"; graphics_data[2] = "0901"; graphics_path[2] = "images/9.jpg"; graphics_data[3] = "1201"; graphics_path[3] = ".images/73.jpg"; for (i = 0; i < maxFile; i++) { if (graphics_data[i] > today) { if (i == 0) { i = maxFile; } break; } } i--; document.write("<IMG SRC=\"" + graphics_path[i] + "\">"); } //--> </SCRIPT> 実は、画像のサイズを指定したいのですが…。 どこに何を入れたらいいのか分かりません。 何か、イイ方法はありませんか?

  • JS 日付表示

    JavaScript for文の日付表示について JavaScriptでfor文で日付表示したい場合、月末の最終日を取得するだけでは月の切り替えができないのでしょうか? 今日から一週間後までを表示するアプリを作りたいのですが1/31を過ぎると2/1にならず1/32と表示されてしまいます。 何か間違っている所ありますでしょうか? 以下ソースコード <script type="text/javascript"><!-- var now = new Date(); var y = now.getFullYear(); var m = now.getMonth() + 1; var d = now.getDate(); console.log(now); // Thu Jan 30 2014 00:00:00 GMT+0900 (東京 (標準時)) console.log(new Date(now.getFullYear(), now.getMonth() + 1, 0)); // Fri Jan 31 2014 00:00:00 GMT+0900 (東京 (標準時)) for(i=0;i<100;i++){ document.write(y + "/" + m + "/" + (d + i).toString() + "<br>"); } // --></script> <body> </body>

  • 毎週土曜日のみの日付を取得、プルダウンリストに表示させたい。

    毎週土曜日のみの日付を取得、プルダウンリストに表示させたい。 よろしくお願い致します。 表題の通りなのですが、Javascriptで「毎週土曜日の日付のみ」を取得して、 プルダウンリストで表示・選択させたいと考えております。 以前、任意での指定日以降(明日や明後日など)の日付と曜日を取得して、 プルダウンで表示・選択できるコード(下記のものです)を教えて頂いたのですが、 このような感じで土曜日の日付のみを表示・選択できるようになると理想です。 <script language="javascript"> //var Today = new Date(); //var d = new Date(); var Youbi = new Array( "日", "月", "火", "水", "木", "金", "土" ); /* ひと月後までを表示 */ for ( var i = 3; i < 31; i++ ){ var d = new Date(); d.setDate( d.getDate() + i ); /* 各要素を抽出(月と日は2桁で)*/ var sYer = "" + d.getFullYear(); var sMon = ( "00" + ( d.getMonth() + 1 ) ).match( /..$/ );; var sDat = ( "00" + d.getDate() ).match( /..$/ ); var sDay = Youbi[ d.getDay() ]; /* <option>を書き出し */ document.write( "<option value = '" + sYer + "年" +sMon + "月" + sDat + "日" + "'>" +sYer + "年" + sMon + "月" + sDat + "日(" + sDay + ")</option>\n" ); } </script> もしお分かりの方がいらっしゃいましたら、ご教授頂けると幸いです。 どうぞよろしくお願い致します。

  • 同時に複数重複する項目だけを絞り込ませたいです。

    3つの項目を絞り込む機能を実現したいです。 実現させたいことは、 チェックを1つ付けると、その項目だけしかないものを絞り込み、 チェックを2つ付けた場合は、その項目が両方あるものだけを絞りこみたいです。 現在は項目は3種類だけですが種類が増えても更新に負担がかからないようにしたい 試しましたが、チェックが2つ以上になると重複させて機能させることができませんでした。 アドバイスを頂けないでしょうか。 <html lang="ja"> <head> <script type="text/javascript"> function fff() { var elm = document.getElementById('test1'); var tag = document.getElementsByTagName('input'); var svalue1 = new Array(); var svalue2 = new Array(); var svalue3 = new Array(); var ccc; for(i=0, elmL=elm.children.length; i<elmL; i++){ var spanTAG = elm.children[i].getElementsByTagName('span'); svalue1[i] = new Array(); svalue2[i] = new Array(); svalue3[i] = new Array(); for(m=0, spanL=spanTAG.length; m<spanL; m++){ if(spanTAG[m].className == "span1"){ svalue1[i][m] = spanTAG[m].innerHTML; }else if(spanTAG[m].className == "span2"){ svalue2[i][m] = spanTAG[m].innerHTML; }else if(spanTAG[m].className == "span3"){ svalue3[i][m] = spanTAG[m].innerHTML; } if(tag[0].checked && !tag[1].checked && !tag[2].checked){num=1;}else if(tag[1].checked && !tag[0].checked && !tag[2].checked){num=2;}else if(tag[2].checked && !tag[0].checked && !tag[1].checked){num=3;}else if(tag[0].checked && tag[1].checked && !tag[2].checked){num=4;}else if(tag[0].checked && tag[2].checked && !tag[1].checked){num=5;}else if(tag[1].checked && tag[2].checked && !tag[0].checked){num=6;}else if(tag[0].checked && tag[1].checked && tag[2].checked){num=7;}else{num=8;} switch(num){ case 1: if(new RegExp(tag[0].value).test(svalue1[i][m]) && !new RegExp(tag[1].value).test(svalue2[i][m]) && !new RegExp(tag[2].value).test(svalue3[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 2: if(new RegExp(tag[1].value).test(svalue2[i][m]) && new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[0].value).test(svalue1[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 3: if(new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[1].value).test(svalue2[i][m]) && !new RegExp(tag[0].value).test(svalue1[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 4: if(new RegExp(tag[0].value).test(svalue1[i][m]) && new RegExp(tag[1].value).test(svalue2[i][m]) && !new RegExp(tag[2].value).test(svalue3[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 5: if(new RegExp(tag[0].value).test(svalue1[i][m]) && new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[1].value).test(svalue2[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 6: if(new RegExp(tag[1].value).test(svalue2[i][m]) && new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[0].value).test(svalue1[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 7: case 8: elm.children[i].style.display = 'block'; break; } } } } </script> </head> <body> <form action="#"> <ul> <li><input type="checkbox" name="c1" id="c1" value="aaa" onclick="fff()" /><label for="c1">aaa</label></li> <li><input type="checkbox" name="c2" id="c2" value="bbb" onclick="fff()" /><label for="c2">bbb</label></li> <li><input type="checkbox" name="c3" id="c3" value="ccc" onclick="fff()" /><label for="c3">ccc</label></li> </ul> </form> <div id="test1">  <div class="test2">   <span class="span3">ccc</span>   <span class="span2">bbb</span>   <span class="span1">aaa</span>   </div>  <div class="test2">   <span class="span3">ccc</span>   <span class="span1">aaa</span>  </div>  <div class="test2">   <span class="span2">bbb</span>   <span class="span1">aaa</span>  </div>  <div class="test2">   <span class="span3">ccc</span>  </div>  </body

  • javascriptで数日後の日付を表示したい。

    javascriptで現在の日付と数日後(指定して)の日付を表示したいです。 例えば、 受付: 7/21 報告: 7/23(+2日後)となるようにしたいです。 ただ、2月や小の月(30日)までなんかはきちんとクリアできるように(6/31などにならないように)したいです。 javascriptはできれば外部ファイルで管理していますので、<head>内に書くよりも 外部ファイルとして記載できるような形が理想的です。 JSとHTMLのタグを両方教えて頂けると助かります。 よろしくお願いします。 ちなみに、ここ↓を参考にしたのですが、いまいち設置の仕方がわかりませんでした・・・。 http://www.tohoho-web.com/js/date.htm

  • 日付の表示~どこがおかしいでしょうか?~

    「データベースの任意のフォーム(テスト日付リスト)から今日以降の日付のデータを取得し、日付が近い順にwebページに表示する」方法を考えています。 下記のスクリプトですとデータベースの任意のフォームには9月内の日付リストが存在するのに、webページでは今月(9月)分の日付のデータは表示されず、10/1以降の日付のデータが取り出されてしまいます。 =========== <? define("FORMID_TEST", "テスト日付リスト"); function getTestDayList() { global $NBCLIENT; $testdaylist = array(); $datalist = $NBCLIENT->search(FORMID_TEST,$conditions); if (is_array($datalist)) { $testdaylist = $datalist; } return $testdaylist; } function cmp($a, $b){ $x=$a["テスト日付"]; $y=$b["テスト日付"]; if($x == $y){ return 0; } return ($x < $y) ? -1 : 1; } $seminarsortlist = getSeminarSortList(); usort($seminarsortlist, "cmp"); $today = time(); foreach ($seminarsortlist as $seminarsort) { ?> <? $view = date_format("Ymd",$seminarsort["テスト日付"]); $y = substr("$view",0,4); $m = substr("$view",4,2); $d = substr("$view",6,2); $viewflug = mktime(0,0,0,$d,$m,$y); ?> <? if ($viewflug - $today < 86400) { ?> <?=hs($seminarsort["テスト日付"]) ?> <? } ?> <? } ?> =========== どうしても解決できません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • select要素のvalueを配列で取得したいです

    select要素のvalueを配列で取得したく、下記のサンプルを動かそうと試みました。 <html> <head></head> <body> <form> <!-- ここに<select name="c1">~<select name="c20">の20個のselectがあるとする --> </form> <input type="button" value="はい" onclick="test(this.form)"> <script type="text/javascript"> function test ( form ) { var values = new Array(); for ( var i=0; i < 20; i ++ ) { var elm = form.elements['c'+i]; values[i] = elm.options[elm.selectedIndex].value; } } </script> </body> </html> このようなサンプルを動かそうとしたのですが、 var elm = form.elements['c'+i];のところの['c'+i]が正しくないようで 「elm is underfind」というエラーが出てしまいます <script> function myForm (form) { var values = new Array(); for ( var i=0; i<20; i++ ) { var elm = form.elements[i]; values[i] = elm.options[elm.selectedIndex].value; document.write(values[i] + "<br />"); } } </script> インデックス名を'c'+iからiにすると取得できるのですが、 ブラウザが読み込みをやめない状態になってしまいます。 select要素のnameはc1から始まりc20と何も換えていません。 何が間違っているのでしょうか。

  • 現在の日付から、1ヶ月前にするスクリプトです。

    現在の日付から、1ヶ月前にするスクリプトです。 月を「-1」すると0月になるので、「12」になるようにしたのですが、 年が「2005」のままです。同様に「2004」になるようなやりかたを教えてください。 <script language="JavaScript"> <!-- date = new Date(); mon = date.getMonth() + 0; if (mon < 1) { mon = "12"; } document.write(date.getFullYear() + "年" + mon + "月" + date.getDate() + "日"); // --> </script>

  • 日付の表示

    いつもお世話になっております。 早速ですが、ASPで日付の表示を考えております。 date()関数を使って取得は出来ました。 2005/06/21の表示を2005年6月21日の表示に変えたいのですが、わかりません。 VBなどですと、一発変換があったように思います。 年と月と日付で区切らないと駄目でしょうか? その際には月や日付の「06」の”ゼロ”を取り除きたいのです。 宜しくお願いします。