記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

閏年の時、カウントはどうなるの?

今年は閏年だったので、「いくつになったの」では2月29日はカウントされるの?というご質問を複数いただきました。(回答に書かなかった部分も含めてブログネタに…)

答えはyes。
閏年の場合、2月は29日でカウントします。

また、誕生日が2月29日の場合はどうなるか?

これも問題なく、他の誕生日と同じようにカウントします。
閏年には、2月29日に「今日で○歳」「Happy Birthday!!」と表示しますが、平年ではそれが2月28日になります。
カウントダウンは、閏年は2月29日まで、平年は2月28日までの残日数を表示します。
誕生日はあくまで「29日」なので、生年月日は「○年2月29日生まれ」と表示されますし、「○歳1ヶ月」と表示されるのは「3月29日」です。

※余談ですが、「いくつになったの」での「1ヶ月」の数え方は、30日とか31日とか決まった日数ではなく、誕生日の日付になったら1ヶ月経過、となります。つまり2月20日生まれなら、3月20日で1ヶ月になります。当たり前か(笑)

では1月31日生まれの場合、「1ヶ月」はいつになるか?
2月28日には「○歳と28日」と表示されます。そして翌日の3月1日には、「○歳1ヶ月1日」になります。2月に31日がないので、この場合「1ヶ月ちょうど」という表示は出てきません。

「○ヶ月○日」の算出方法は、実はあまり単純ではないんですよね。
誕生月日と現在時刻の差を出せば、確かに日数はでるけど、それをどうやって何ヶ月何日に直すのかは考えどころ。
日数カウントのスクリプトはたくさんあるのに、○ヶ月○日表示が少ないのは、そのせいですよね。

私の場合、ひたすら条件分岐です。
今月が、誕生月の前か、後か。前なら年齢を1引く。
今日の日付が、誕生日の日付の前か、後か。前なら、○ヶ月から1引く。そんなローテクで。
…割り算でスマートにできる気がするんですけど( >Д<;)



閏年になる・ならないの条件ですが、現行のグレゴリオ暦では

・西暦が4で割り切れる年は閏年である。(いわゆるオリンピックイヤー)
・ただし、100で割り切れる年は閏年ではない。
・ただし、400で割り切れる年は閏年である。

となっています。(wikipediaからの受け売り。)

スクリプトでは、次のような閏年関数uruu()にしました。

function uruu(seireki){
var ur=0;
if (seireki%4==0){
if ((seireki%100!=0)||(seireki%400==0))ur=1;};
return(ur);
};


算出する年をseirekiに代入し、平年ならur→0、閏年ならur→1を返します。
結果、閏年なら

var num=new Array(31,31,29,31,30,31,30,31,31,30,31,30);


平年なら

var num=new Array(31,31,28,31,30,31,30,31,31,30,31,30);

で日数を算出。
でも、100や400で割り切れる年って、パソコン上では西暦2000年しかないんですよね。
うちのパソコン(XP)なんて1980年~2099年までしか表示しないし、このスクリプトを作ったのは2001年。前にご指摘を受けたので100と400も一応加えてあるんですけれど、あと92年も使われるつもりでいるような、おこがましい気がする(笑)

(あ、設計思想として重要なんだろうなと理解はしてるんですけど。2000年問題が起きたのって日時の期限が短すぎたせいでしたっけ?)

これを書いた後で、閏年と平年と両方の配列を用意するのは無駄だって気づいて、
その後は
var num=new Array(31,31,28,31,30,31,30,31,31,30,31,30);
if (uruu(ty)==1)num[2]=29;
としました。



ついでに、カウントダウンの処理は、次のようにやってます。(折角の機会なので覚書代わりにー)

var nbd=bd;
if (uruu((by+ys+1))==0){
if ((bm==2)&&(bd==29)) nbd=28;
};

まず、次に来る誕生日の西暦を(by+ys+1)で出してます。「生まれた年(by)+今の満年齢(ys)+1」。次に来る誕生日は今年かも知れないし、もう誕生日過ぎちゃって来年かも知れないので、「今年(ty)+1」ではダメで、このように算出してます。
で、それを先の閏年関数uruu()に代入して、次の誕生日が閏年かどうかを判定。
結果、平年だったら、翌年の誕生日は2月28日として(nbd=28)、カウントダウン計算する。
閏年だったら29日のままにする。(考え方単純ですね;)
関連記事

カウントパーツを配布しています

*KT*では、誕生日・記念日・出産予定日などのカウントダウンを表示する、自作のブログパーツを配布しています。
カスタマイズOKなので、色々な使い方ができます。
js_ikutu01.gif kinenbi_01.gif js_baby_01.gif

詳しくはサイトトップページへどうぞ♪

このブログでは、*KT*からのお知らせや、管理人の近況をお送りしています。

FC2ブログ共有プラグイン版のご案内

FC2ブログでは、共有プラグイン版もご利用になれます。

■共有プラグイン版は、「いくつになったの」「いくつになったのver2」「キネンビ」「My Baby Comes」の4 種類です。(このブログのサイドバーに見本があります。)
■管理画面の「共有プラグインの追加」から簡単に設置できます。詳しくはサイドバーの説明を御覧ください。
■人数追加などの変更方法がちょっと面倒なので、そのままお使いになる方向きです。

★共有プラグイン版では、設置やカスタマイズのサポート(上手くいかない場合のアドバイス)は基本的に行ないません。サポートが必要な場合は、サイト配布版をご利用ください。
★共有プラグイン版のトラブルについては、このブログのカテゴリーの「Q&A」をご覧ください。

いくつになったの

キネンビ

FC2ブログ共有プラグイン
-----------------------

いくつになったの ver2

FC2ブログ共有プラグイン
-----------------------

いくつになったの+ヒトならいくつ

FC2ブログ共有プラグイン
-----------------------

My baby comes

FC2ブログ共有プラグイン
-----------------------

共有プラグインからの貼り付け方

FC2ブログへ簡単設置。あまりカスタマイズしないで使う人向きです。


1.管理画面から[環境設定]-[プラグインの設定]を開きます。

2.[共有プラグイン追加]をクリックします。

3.作者名に COEL と半角入力し、[検索]をクリックします。

4.一覧表示されたら目当てのプラグインをクリックし、ダウンロードページを開きます。

5.説明をよくお読みの上、項目に記入し、ダウンロードすれば完了です。

★プラグイン対応のテンプレートをお使いください。

★プラグイン非対応のテンプレートでは、使用できません。どうしても設置したい場合は、サイト*KT*で配布のブログパーツをテンプレートHTMLに直接貼り付けてください。(サポートはいたしかねますので自己責任でお願いします!)

フリーエリア

いくつになったの(簡易版)
お名前
キネンビ(簡易版)
結婚して
お名前

いくつになったの ver2テスト

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。