mixiユーザー(id:7828375)

2017年04月09日23:29

317 view

ひづけの面倒くささ

 天外2の発売から経過した時間を追記しようと思ったが、これは毎日どんどん増えていくものだ。毎日手動で更新するのは面倒。経過年数だけじゃあナンだし、結局これも毎年発売日に更新するハメになる。かといって該当ページを全部Perlにするのも面倒。なんかこう、ササっとここだけ書き換えらんないかな〜。

というわけでJavaScriptを使う事にした。

日付の取得方法、日付のデータの取り出し、作成、文字列の編集方法を調べ、さぁ実装しよう。

 日付のデータは1970年1月1日0時からの秒数というデータ形式らしい。現在時刻から天外2発売日の時刻を引けば、経過時間がわかるわけだ。こいつぁ楽勝だぜ!

だが、これだけでは秒を日に直したところで「9200日」みたいなことになる。これじゃあとてもわかりにくい。9200日をさらに年に換算したい。

じゃあ「9200/365」でいいのかなと思うと、それがそういうわけにもいかない。うるう年の存在だ。大体四年に一度訪れるうるう年では366日になってしまう。

 そこでうるう年について調べると、
1.4で割り切れる年はうるう年
2.4で割り切れても、100で割り切れる場合はうるう年じゃない
3.でも400で割り切れるのはうるう年

という、なんだか面倒なルールなことがわかった。

 for文のループで年ごとにうるう年かどうかをチェックして、うるう年なら366で引き、そうでないなら365で引くように組んでみる。そのためにわざわざ「西暦を入れたらうるう年の真偽を返す関数」も作った。

だがしかし。出来上がったものを実行してみても、「発売日が過ぎてる」場合はちゃんと思い通りの結果が出るのに、「発売日前」の場合は「27年-200日」みたいにどうにもおかしなことになる。

(天外2の発売日からの経過時間と、シリーズ1作目である天外1からの経過時間を表示するつもりだったので、偶然にもいい具合にテストが出来た)

 う〜ん。考える。

 うーん。

 そうか。そもそも1年を1月1日からって考えでいたけど、発売日からの経過時間なんだから、スタートは天外2なら3月26日で、天外1なら6月30日なんだ。

ってことは初年度だけ365で引いたらだめなのか……?

いや、めんどくせーななんだこれは。


 ここで一旦、すでにこんなことは誰かプログラム組んでないのかなと思って検索してみるのだが、誰も組んでないらしいことがわかる。

 うーん。考える。

 そうだ。私が最終的に表示したいと思っている形は

「発売日からの経過時間:25年14日」

だけなんだ。だとすれば、去年の発売日から何日経過してるかだけ数えればいいので、その間のうるう年とかは別に関係ないんだ。

 んで、経過年数は「発売年 - 本年」ですぐ出るので、経過日数を「去年の発売月日 - 今年の発売月日」で出す……のだが、そうすると今度は「今年の発売月日を過ぎている場合」に「378日」みたいになってしまう。

そこで、まず「今年の発売月日前か、後か、当日か」を判別することにした。発売日前なら去年の発売月日からの経過日数を計算。発売日後なら今年の発売月日からの経過時間を計算。当日なら経過時間はゼロ。

ちなみに発売日前なら、経過年数は-1にする。

なんかうまいことできたっぽい!

さらにこれを天外2でも天外1でもパっと結果が出るように「西暦/月/日」のデータを与えてやれば、現在までの経過時間を返すという形の関数に仕立て上げた。


 いや〜出来た出来た。出来たはいいけど、他に使い道がないな。うるう年判別関数は結局使わないことになったし。ふ〜。
0 0

コメント

mixiユーザー

ログインしてコメントを確認・投稿する

<2017年04月>
      1
2345678
9101112131415
16171819202122
23242526272829
30