how could i calculate average age of my members using a profile date_of_birth date field?
Hi,
Does anyone on the list have experience integrating Drupal 6 & KnowledgeTree?
I've installed Knowledge Tree and the KT Module. It seems to work, except that when I connect from within Drupal, the output is restricted to a very small area of the screen and there are no scrollbars.
Ken
Calculate the current age of all users. Then sum and divide by the total amount of users. For a less accurate solution you could suffice by calculating the age just by averaging over all the years of birth, and subtracting 0.25. We assume then that birthdays are spread out uniformly, and thus subtraction of 0.25 is necessary to compensate for the birthdays in Oct, Nov, and Dec that still haven't passed yet.
Problem is that the Profile module saves its date field as a serialized array, so you have to do all the work in PHP in stead of directly on the database.
Because I use the Birthdays module (which stores its birthdays as datetime values), I can directly calculate it from the database using the below methods. // Short, inaccurate method avg(year(now() - year(birthday)) - 0.25 = 24,2 years old
// Longer, but more accurate method. avg((year(now()) - year(birthday))+(DAYOFYEAR(now()) > DAYOFYEAR(birthday))) = 24.2 years old
In PHP you want something like this: <?php $result = db_query("SELECT value FROM {profile_values} WHERE fid = %d", $profile_field_id_of_date_field); $i = 0; $sum = 0; while ($row = db_fetch_object($result)) { $dob = unserialize($row->value); if(is_array($dob)) { extract($dob); }
if ($day && $month && $year) { // Current year - birthday_year - (1 if birthday hasn't been yet) $age = (date('Y') - $year) - (date('nd') < $month . str_pad($day, 2, 0, STR_PAD_LEFT)); $sum += $age; $i++; } } $average_age = $sum / $i; ?>
On Wed, Oct 8, 2008 at 3:48 PM, Rohan Smith rohanasmith@gmail.com wrote:
how could i calculate average age of my members using a profile date_of_birth date field?
-- [ Drupal support list | http://lists.drupal.org/ ]