10 月 1 日から 3 月 31 日までの料金は 1 ドル (シーズン 1) です。4 月 1 日から 9 月 30 日までの料金は $2 (シーズン 2) です。
シーズン 1 とシーズン 2 に該当する日付範囲の日数に応じて、特定の日付範囲 (ユーザー入力) の合計料金を計算するにはどうすればよいですか?
以下は、ユーザーの日付範囲の日数を示していますが、シーズン 1 またはシーズン 2 に対してテストする方法がわかりません。
$user_input_start_date = getdate( $a );
$user_input_end_date = getdate( $b );
$start_date_new = mktime( 12, 0, 0, $user_input_start_date['mon'], $user_input_start_date['mday'], $user_input_start_date['year'] );
$end_date_new = mktime( 12, 0, 0, $user_input_end_date['mon'], $user_input_end_date['mday'], $user_input_end_date['year'] );
return round( abs( $start_date_new - $end_date_new ) / 86400 );
日付範囲が 2012 年に開始して終了する場合、または 2012 年に開始して 2013 年に終了する場合だけでも、日付範囲を開始できる季節と終了する場所の 10 通りの可能性が得られます。
次の条件では、if/else を反復して日付を何度も比較するよりも優れた解決策があるはずです。
- 期間は完全にシーズン 1 内です
- 期間はシーズン 1 で開始し、シーズン 2 で終了します
- 期間はシーズン 1 で始まり、シーズン 2 にまたがり、シーズン 1 の後半で終わります
...など「シーズン2から始まる」など
これは、 XYZ 日付まであと何日ですか?の複製ではありません。日数のカウントのみを扱うためです。ある日付範囲を別の日付範囲と比較する問題には対処しません。