- ベストアンサー
現在と指定の日付の年数差を効率的に表示させる方法
- 質問者は、現在の日付と指定の日付の年数差を効率的に表示させる方法を知りたいとしています。
- 現在の日付からPタグ内の日付を差し引いて、年数の差を求めたいとしています。しかし、現在のコードが長くなってしまっており、短くする方法があれば教えてほしいとも述べています。
- また、質問者はコード内の以下の疑問を持っています: 1. forループの中でnew Date()を使うことは問題ないか 2. 365日で計算しているが、閏年などの影響はないか 3. コードをもっと短くすることは可能か
- みんなの回答 (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}())
その他の回答 (2)
- babu_baboo
- ベストアンサー率51% (268/525)
こうりつてきかどうかは、びみょう。 (できるなら、あらたなしつもんは、とじてからにしてほしい。) <!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>
お礼
こちらの場合も正規表現を使うとよいのですね。 有難うございます。勉強して解読を試みます。
- osamuy
- ベストアンサー率42% (1231/2878)
こんなんとか。 http://www.ideone.com/AZdF5 まあ、Dateオブジェクトで計算してるのと大差ないですが。 ということで、質問1~3は省略。
お礼
こんなに短くなるのですか!! 凄いですね。有難うございます。