• ベストアンサー
※ 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