カレッヂ |
質問者 たぬぽん
投稿日 7/25(水) 14:36:21
☆投稿ネタ☆ 日付の計算でちょっと困っています。教えて下さい。 入力された日付をXX月後の日付に変えたいのです。 日付の計算なんですが、XX月後の日付を求めたいのです。 現在下のような記述でやっていますが、もっと簡単な方法や関数があれば教えていただきたいと思います。 また、同じようにXX日後の日付も出せるようにしたいです。(30日とか31日があってややこしいのですが...。) どうか助言をお願いします。 ------------------------------------------------------------------------------ 入力した値 $START = '2001/08/01'; $KIKAN = '48'; @DATE_T = split(/\//,$START); #形式フォーマット $DATE_T[1] = $DATE_T[1] + $KIKAN; $DATE_T[0] = $DATE_T[0] + ($DATE_T[1] / 12); $DATE_T[1] = $DATE_T[1] % 12; $DATE_TIME = sprintf("%04d/%02d/%02d", $DATE_T[0], $DATE_T[1], $DATE_T[2]); ------------------------------------------------------------------------------ |
回答者 しあわせのツボ
[削除]
投稿日 7/25(水) 15:34:42
例のままだと、1月31日の1ヶ月後が2月31日になってしまいますね。 私なら以下のように書き直します。 $START = '2001/08/01'; $KIKAN = '48'; @DATE_T = split(/\//,$START); $DATE_T[1] = $DATE_T[1] + $KIKAN; while ($DATE_T[1] > 12) { ++$DATE_T[0]; $DATE_T[1] -= 12; } if ($DATE_T[0] % 4) { $febdays = 28; } else { $febdays = 29; } # これで対応できるのは1901年〜2099年です @mdays = ('',31,$febdays,31,30,31,30,31,31,30,31,30,31); if ($DATE_T[2] > $mdays[$DATE_T[1]]) { $DATE_T[2] = $mdays[$DATE_T[1]]); $DATE_TIME = join('/', @DATE_T); 日数計算はちょっと書ききれません。 レスキューさんのwebdiaryが同様の処理を行っているので参考になるはずです。 |
質問者 たぬぽん
[削除]
投稿日 7/26(木) 11:35:06
ありがとうございました。 おかけで参考&勉強になりました。 日付の計算ってちょっとややこしいですね...。(^^ゞ また、困ったことがあったらよろしくお願いします。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |