note 65940 added to function.date

From: Date: Wed, 10 May 2006 10:05:57 +0000
Subject: note 65940 added to function.date
Groups: php.notes 
Request: Send a blank email to php-notes+get-111064@lists.php.net to get a copy of this message
For those interested. Pretty quick and dirty solution. <?php /* * array week2date ( integer weeknumber, integer year ) * returns an array with the days in a particular week */ function week2date($weeknumber, $year) { // start at week 1 $week = 1; // start searching from day 1 $day = 1; // count the number of loops $loop = 1; // count the number of days found (used to create a readable array) $daycount = 1; // loop until a certain weeknumber is found while($week <= $weeknumber) { // increase $day with 7 - a week lasts 7 days $day = $day + 7; // calculate the week number $week = date('W', mktime(0, 0, 0, 1, $day, $year)); // if $loop is 1, this is the first day and loop and should not return 52 // prevent from stopping if $week returns 52 if($loop == 1 && $week == 52) { $week = 1; } // the day is in the specified week if($week == $weeknumber) { // since we found the week, put the initial day into an array $array_day = date('d', mktime(0, 0, 0, 1, $day, $year)); $array_month = date('m', mktime(0, 0, 0, 1, $day, $year)); $array_year = date('Y', mktime(0, 0, 0, 1, $day, $year)); $array[$array_year][$array_month][$array_day] = true; // increase daycount for the readable array $daycount++; // set new variables to find other days within a week $day_inc = $day; // used to increase $day_dec = $day; // used to decrease $week_inc = $week; // used to increase $week_dec = $week; // used to decrease // find other days in that week, increase by 1 first while($week_inc == $weeknumber) { // increase day by 1 as the $day_inc has already been found $day_inc = $day_inc + 1; // select the weeknumber $week_inc = date('W', mktime(0, 0, 0, 1, $day_inc, $year)); // it seems that the loop still counts 1 day off, so check again to be sure if($week_inc == $weeknumber) { // week found, put data into the array $array_day = date('d', mktime(0, 0, 0, 1, $day_inc, $year)); $array_month = date('m', mktime(0, 0, 0, 1, $day_inc, $year)); $array_year = date('Y', mktime(0, 0, 0, 1, $day_inc, $year)); $array[$array_year][$array_month][$array_day] = true; // increase daycount again $daycount++; } } // find other days by decreasing while($week_dec == $weeknumber) { // decrease days $day_dec = $day_dec - 1; // find week number $week_dec = date('W', mktime(0, 0, 0, 1, $day_dec, $year)); // extra check if($week_dec == $weeknumber) { // week found, put data into the array $array_day = date('d', mktime(0, 0, 0, 1, $day_dec, $year)); $array_month = date('m', mktime(0, 0, 0, 1, $day_dec, $year)); $array_year = date('Y', mktime(0, 0, 0, 1, $day_dec, $year)); $array[$array_year][$array_month][$array_day] = true; // increase daycount $daycount++; } } // everything was found, break the loop break; } // increase loop count $loop++; } $i = 0; // build sorting ksort($array); foreach($array as $year => $month_array) { ksort($month_array); foreach($month_array as $month => $day_array) { ksort($day_array); foreach($day_array as $day => $day_boolean) { $new_array[$i]['day'] = $day; $new_array[$i]['month'] = $month; $new_array[$i]['year'] = $year; $i++; } } } $array = $new_array; // return the results return $array; } ?> ---- Server IP: 83.137.20.120 Probable Submitter: 62.58.16.80 (proxied: 1.0 AMSHQB-PRX02) ---- X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/function.date.php Edit -- http://master.php.net/note/edit/65940 Del: integrated -- http://master.php.net/note/delete/65940/integrated Del: useless -- http://master.php.net/note/delete/65940/useless Del: bad code -- http://master.php.net/note/delete/65940/bad+code Del: spam -- http://master.php.net/note/delete/65940/spam Del: non-english -- http://master.php.net/note/delete/65940/non-english Del: in docs -- http://master.php.net/note/delete/65940/in+docs Del: other reasons-- http://master.php.net/note/delete/65940 Reject -- http://master.php.net/note/reject/65940 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#111064) next »