count how many days within a date range are within another date range

Posted by joko13 on Stack Overflow See other posts from Stack Overflow or by joko13
Published on 2012-11-05T07:42:38Z Indexed on 2012/11/05 11:01 UTC
Read the original article Hit count: 279

Filed under:

From October 1st to March 31 the fee is $1 (season 1). From April 1st to September 30 the fee is $2 (season 2).

How can I calculate the total fee of a given date range (user input) depending on how many days of this date range fall into season 1 and season 2?

The following gives me the number of days of the user´s date range, but I have no idea how to test against season 1 or season 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 );

Thanks for your help!

EDIT: Given that a date range starts and ends in 2012 or starts in 2012 and ends in 2013 alone gives me 10 different possibilities of in which season a date range can start and where it can end.

There must be a better solution than iterating if/else and comparing dates over and over again for the following conditions:

  1. Date range is completely within season 1
  2. Date range starts in season 1 and ends in season 2
  3. Date range starts in season 1, spans across season 2 and ends in the second part of season 1

... and so forth with "Starts in season 2", etc

© Stack Overflow or respective owner

Related posts about php