从 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 日期还有多少天?因为这只涉及计算天数。它没有解决将一个日期范围与另一个日期范围进行比较的问题。