note 40193 deleted from function.date by kennyt

From: Date: Sun, 18 Jul 2004 17:24:32 +0000
Subject: note 40193 deleted from function.date by kennyt
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-73506@lists.php.net to get a copy of this message
Note Submitter: mcrackan ---- Ok, that'll teach me to post a 'solution' before I test it. Here's the real and tested solution to 'find X number of weekdays starting from day Y'. By the way, I created this for an application that needs to calculate the time left between a starting date and a due date, so that's why everything is expressed like 'X days left.' Again: My version calculates in seconds (unixtime) but if you need to use whole days, it shouldn't be hard to tweak. Here's the verbose version: <? // $startunix: starting point // $daysltr: number of weekdays (m-f) to count ahead function weekdays_left($startunix, $daysltr) { // seconds per day $spd = 86400; // numeric day of week $numdow = date("w", $startunix); // numeric days left in week 1 $wk1dayslft = 5 - $numdow; // if days go beyond week 1, continue // else: days later = calender days left if($daysltr - $wk1dayslft > 0) { // days later after wk 1 $leftafterwk1 = $daysltr - $wk1dayslft; // full weeks left $fullwkslft = floor($leftafterwk1 / 5); // extra days left for final week $xdayslft = $leftafterwk1 % 5; // everything beyond here will need 1st weekend added // unless you end on a friday (5 % 5 = 0 instead of 5 like is needed) if($xdayslft > 0) { $firstwkend = 2; } else { $firstwkend = 0; } // if no full weeks, add 1st 2 partial weeks // else: calender days left = (week 1 days + (num_full_weeks x 7) + final week days) if($fullwkslft == 0) { $caldayslft = $wk1dayslft + $xdayslft + $firstwkend; } else { $caldayslft = $wk1dayslft + $firstwkend + ($fullwkslft * 7) + $xdayslft; } } else { $caldayslft = $daysltr; } // seconds left $secslft = $spd * $caldayslft; // end $endunix = $startunix + $secslft; return $endunix; } ?>

« previous php.notes (#73506) next »