質問: 関数を使わないで日付の計算をしたいのですが。 2007,7,5,4 年,月,日,曜日(0が日曜日) の入力から、+10日後の日付と曜日を求めたいのですが、 関数を一切使わず計算式と場合分けのみで計算する方法ありますか? 今考えている方法は、地道に、ある基準1970年1月1日をシリアル値で0としそこから、今日までの日数を1月は31、2月は28にちなどを考えてを足していき、シリアル値を算出。 そのシリアル値に+10した値を再び年月日曜日の形に戻す方法しか無いのかと考えています。
回答: ★最初に >関数を一切使わず計算式と場合分けのみで計算する方法ありますか? ↑ あります。というか関数で記述することを記述すればよいだけ。 汎用性も考えれば専用の関数か、日付操作ライブラリを自作して使いまわした方が 良いと思いますよ。 >今考えている方法は、地道に、ある基準1970年1月1日をシリアル値で0としそこから、 >今日までの日数を1月は31、2月は28にちなどを考えてを足していき、シリアル値を算出。 >そのシリアル値に+10した値を再び年月日曜日の形に戻す方法しか無いのかと考えています。 ↑ 私もこの方法しか思い浮かびません。 このときの注意点として『閏年』の判定、扱いをきちんと考えないと正確になりません。 表計算で有名な excel について興味深い記事を見つけましたので読んで見て下さい。 http://pc.nikkeibp.co.jp/article/npc/20070530/272938/→『datedif関数の“受難” (第1回)』 ↑ 3ページ目です。 >10日ではなくて10000日だったらどんな感じになりますか? ↑ 加減算する日付を西暦1年1月1日を1としたシリアル値に変換して加算、減算とするしかないかな。 ・開始日を y1/m1/d1 とすると days = ((y1 * 365) + (y1 / 4) - (y1 / 400 * 3)) + funcgetdays(y1,m1,d1); days += 10000; ←加算 days -= 10000; ←減算 この days のシリアル値を年、月、日に変換します。 ※funcgetdays() 関数は年月日から1月1日の日数を計算する関数です。 ※この関数の詳しい内容は下の『参考url』をどうぞ。回答者no.2です。 ※そのたも参考になります。 ・以上。 参考url:http://oshiete1.goo.ne.jp/qa3085731.html