CCK create automatically updating year select field

When you want to create a list of years as a select field in CCK ranging from some set date in the past to the current date you have a couple of options. The first option would be to go through and manually enter every year from that date to present. This may be ok if you only are working with a date range of 3 or 4 years, but what if you want to list the years since the 1800s. Obviously that list would be painful to make, and what’s worse you would have to make sure the site was updated every year by someone competent enough not to destroy the information. There is of course another solution. It takes a bit more thinking, but it is more resilient.

When creating your select field for your content type open the “PHP code” section, leave the normal “Allowed values list:” area blank, and enter the following code in the text area:

Then go either to your template.php file or to a custom module and enter the following code. (I recommend putting the code into a create a module that accompanies my theme development.)

// You can name this function whatever you want, just be consistent.
function year_list() {
  $year_array = array();
  // Substitute the start date that you want here.
  $year = 1960;
  // If you want the date to end in some other time besides the present then just set the $end variable to the date you desire.
  $end = (int)date(‘Y’,time());
  while ($year